内容正文:
第10章 存储过程
主要内容
10.1 存储过程概述
10.2 创建存储过程
10.3 调用存储过程
10.4 查看存储过程
10.5 修改存储过程
10.6 删除存储过程
10.7 常量和变量
10.8 流程控制语句
10.9 错误处理
10.10 游标
10.11 本章小结
10.1 存储过程概述
将多条SQL命令组合在一起形成一个程序一次性执行,我们称之为存储程序。存储程序包括存储过程和存储函数,它们是在数据库中定义的一些SQL语句的集合,可以直接调用这些存储过程和存储函数来执行已经定义好的SQL语句。
存储过程是存放在数据库中的一段程序,是数据库的对象之一。它由声明式的SQL语句(如DDL语句、DML语句)和过程式的SQL语句(如选择语句、循环语句)组成。
10.1 存储过程概述
存储过程通常有如下优点:
封装性:在程序中多次调用,而不必重新编写该存储过程的SQL语句,并且可以随时对存储过程的特性进行修改,而不会影响到调用该存储过程的应用程序源代码。
增强SQL语句的功能和灵活性:可以用流程控制语句来完成一些复杂的判断或计算,有很强的灵活性。
减少网络传输:存储过程是在服务器中存储和运行的,当客户端调用存储过程时,只需要从客户端或应用程序传递给数据库必要的参数即可,网络中传输的只是相应的调用语句。
提高数据的安全性:对一些重要的表我们可以禁止客户端访问,只把相关存储过程的创建权限或者调用权限赋予必要的用户,从而防止了对表的误操作。
10.2 创建存储过程
10.2.1 使用命令创建存储过程
语法格式:
CREATE PROCEDURE [IF NOT EXISTS] sp_name([proc_parameter[,…]])
[characteristic…]
routine_body
10.2 创建存储过程
10.2.1 使用命令创建存储过程
其中:
proc_parameter:表示存储过程的参数列表,它由三部分组成,形式为[IN | OUT | INOUT] param_name type。
characteristic:指定存储过程的特性,有以下5个取值。
LANGUAGE SQL
[NOT] DETERMINISTIC
{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
SQL SECURITY{DEFINER | INVOKER}
COMMENT 'string'
10.2 创建存储过程
10.2.1 使用命令创建存储过程
在定义存储过程之前,应该先使用DELIMITER关键字更改结束标记。
结束标记可以是一个字符,也可以是多个字符,如“$”、“##”等。
程序执行完后,考虑到用户使用SQL命令的习惯性,一般要将结束标记再恢复成默认的分号。
DELIMITER关键字和后面的结束标记中间一定要有空格。
10.2 创建存储过程
10.2.1 使用命令创建存储过程
【例10.2】创建存储过程,可以根据学号查询学生的相关信息。
在MySQL命令行客户端输入命令:
DELIMITER //
CREATE PROCEDURE select_student
( IN p_sno CHAR(11) )
BEGIN
SELECT * FROM student WHERE sno=p_sno;
END //
DELIMITER ;
10.2 创建存储过程
10.2.1 使用命令创建存储过程
【例10.3】创建一个存储过程,根据学号查询并输出学生的姓名和专业号。
在MySQL命令行客户端输入命令:
DELIMITER //
CREATE PROCEDURE select_stu
( IN p_sno CHAR(11),
OUT p_sname VARCHAR(10),
OUT p_mno CHAR(4) )
BEGIN
SELECT sname,mno INTO p_sname,p_mno
FROM student WHERE sno=p_sno;
END //
DELIMITER ;
10.2 创建存储过程
10.2.2 使用图形化工具创建存储过程
打开Workbench工具,连接到MySQL服务器。
选中“Schemas”,打开“jwgl”数据库,找到“Stored Procedures”选项,右键单击“Create Stored Procedure…”,或者单击 图标。
10.2 创建存储过程
10.2.2 使用图形化工具创建存储过程
在界面中