MySQL数据库
第五章 存储过程
一、什么是存储过程
1、存储过程(Stored Procedure)
(1)一组为了完成特定功能的 SQL 语句集
(2)它存储在数据库中,一次编译后永久有效
(3)通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它
2、存储过程的优缺点
优点:
(1)存储过程可封装,并隐藏复杂的商业逻辑
(2)存储过程可以回传值,并可以接受参数
(3)存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同
(4)存储过程可以用在数据检验,强制实行商业逻辑等
缺点:
(1)存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程
(2)存储过程的性能调校与撰写,受限于各种数据库系统
二、存储过程的使用
1、创建存储过程
注意:
(1)存储过程名一般以p_开头。
(2)存储过程体包含了在过程调用时必须执行的语句,例如:DML、DDL 语句,if-then-else 和 while-do 语句、声明变量的 declare 语句等
(3)过程体格式:以begin开始,以end结束(可嵌套)
2、调用存储过程
注意:
(1)如果该存储过程设置有参数,在调用时,必须传入参数,并明确写出();
(2)如果该存储过程没有参数,在调用时,()可以不写。
3、存储过程的参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类:
(1)in:输入参数,表示调用者向过程传入值(传入值可以是字面量或变量)。如果不写明参数类型,默认为输入参数。
(2)out:输出参数,表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
- 设置全局变量
通过 set 关键字定义全局变量,变量名前增加前缀 @
通过select关键字显示全局变量。
(3)inout: 输入输出参数,既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
注意: - 输入值使用 in 参数
- 返回值使用 out 参数
- inout 参数尽量少用
4、存储过程的变量
(1)定义变量
(2)变量赋值
三、存储过程的选择结构
1、if…then…else 选择结构
2、case…when 选择结构
四、存储过程的循环结构
1、while …do…选择结构
2、repeat…until 选择结构
3、loop
五、存储过程的游标
1、什么是游标:
游标是保存查询结果的临时区域
2、游标的语法结构