本文将介绍 MySQL 的存储函数和存储过程。
一、说明
存储函数和存储过程都是对某些语句的封装,存储函数侧重于执行语句并返回一个值,存储过程侧重于单纯执行语句。
二、存储函数
1. 创建存储函数
1 2 3 4 5 6 7
| CREATE FUNCTION 存储函数名称([形参列表]) RETURNS 返回值类型 BEGIN 函数语句; 函数语句; RETURN 函数语句; END
|
2. 调用存储函数
3. 查看存储函数
1
| SHOW CREATE FUNCTION 函数名
|
4. 删除存储函数
三、存储过程
1. 创建存储过程
1 2 3 4
| CREATE PROCEDURE 存储过程名称([参数列表]) BEGIN 需要执行的语句 END
|
2. 调用存储过程
3. 查询存储过程
1
| SHOW CREATE PROCEDURE 存储过程名称
|
4. 删除存储过程
5. 形参前缀
与存储函数不同的是,存储过程可以在定义形参时添加参数前缀,如下:
1 2 3 4
| CREATE FUNCTION 存储函数名称( 参数类型 [IN | OUT | INOUT] 参数名 数据类型 ) ···
|
其中,
- IN:
- 实参不需要是变量
- 参数值可以被读取
- 参数不可以被赋值
- OUT:
- 实参应该是变量
- 参数值无法被读取
- 参数可以被赋值,在存储过程中的改变将可以传递出去
- INOUT:
- 实参应该是变量
- 参数值可以被读取
- 参数可以被赋值,在存储过程中的改变将可以传递出去
四、语句
1. 定义局部变量
1
| DECLARE 变量名1, 变量名2, ... 数据类型 [DEFAULT 默认值];
|
2. 设置变量值
3. 分支语句
1 2 3 4 5 6 7 8 9 10 11
| IF 表达式 THEN 处理语句列表 [ ELSEIF 表达式 THEN 处理语句列表 ] [ ELSE 处理语句列表 ] END IF;
|
4. 循环语句
(1) WHILE
1 2 3 4
| WHILE 表达式 DO 处理语句列表 END WHILE;
|
(2) REPEAT
1 2 3 4
| REPEAT 处理语句列表 UNTIL 表达式 END REPEAT;
|
(3) LOOP
LOOP 并没有自带循环终止条件,应该将循环终止条件写到处理语句列表中,当符合循环终止条件时,通过 RETURN 语句终止函数或 LEAVE + flag 跳出循环。
5. 游标
(1) 说明
游标可以用于遍历多行的查询结果。
(2) 创建游标
1 2
| DECLARE 游标名称 CURSOR FOR 查询语句;
|
(2) 打开和关闭游标
- 打开游标意味着执行查询语句,创建一个与查询结果相关联的游标
- 关闭游标意味着释放以游标相关的资源,用完游标后应将其关闭
(3) 获取记录
1
| FETCH 游标名 INTO 变量1, 变量2, ... 变量n
|
通过该语句,可以将结果集中当前行各列的值分别赋值给多个变量,并且游标对应的行会下移,以便下次获取记录时获取下一行。
(4) 遍历结束事件
游标遍历结束时将会触发一个事件,可以通过语句配置该事件发生时执行的操作。
1
| DECLARE CONTINUE HANDLER FOR NOT FOUND 处理语句;
|
参考