MySQL 存储过程和函数
分隔符
MySQL的分隔符告诉MySQL解释器该命令是否已经结束,是否可以执行;
MySQL默认的分隔符是英文分号;
有时候我们需要一次性执行较多的语句且包含分号,如存储过程和函数,这时,我们需要自定义分隔符;
自定义分隔符方式如下:
DELIMITER <分隔符符号>
注意:定义了分隔符之后,语句的结束需要使用此分隔符,默认的分号已无效。
存储过程
创建存储过程的语法
CREATE PROCEDURE <存储过程名>(参数列表)
BEGIN
...
END;
参数列表说明
每个参数的元素构成:
参数模式 参数名 参数类型
参数模式:
IN:此参数作为输入参数;
OUT:此参数作为返回值;
INOUT:此参数既可以是输入参数也可以是返回值。
调用存储过程
CALL <存储过程名>(实参列表);
函数
创建函数的语法
CREATE FUNCTION <函数名>(形参列表) RETURNS <返回类型>
BEGIN
...
END <分隔符>
语法说明
- 形参格式:形参名 形参类型
- 函数必须有且仅有一个返回值
- 函数体内必须有一个return语句
调用函数
SELECT <函数名>(实参列表);
查看函数信息
SHOW CREATE FUNCTION <函数名>;
删除函数
DROP FUNCTION <函数名>;
流程控制结构
分支结构
IF函数
IF(条件判断,expr1,expr2);
条件判断为true,则返回expr1,否则返回expr2.
case结构
- 语法结构1:
CASE 字段|变量名|表达式
WHEN 值1 THEN 语句1;
WHEN 值2 THEN 语句2;
...
ELSE 语句n;
END CASE;
- 语法结构2:
CASE
WHEN 条件判断1 THEN 语句1;
WHEN 条件判断2 THEN 语句2;
...
ELSE 语句n;
END CASE;
语法结构1主要用于枚举值得判断,语法结构2主要用于区间判断。
if结构
语法结构:
IF 条件 THEN 语句1;
ELSEIF 条件2 THEN 语句2;
...
ELSE 语句n;
END IF;
循环结构
while
语法结构:
[标签名:]WHILE 循环条件 DO
循环体
END WHILE[标签名];
loop
语法结构:
[标签名:]LOOP
循环体
END LOOP[标签名];
repeat
语法结构:
[标签名:]REPEAT
循环体
UNTIL 结束条件
END REPEAT[标签名];
循环控制
- 跳出本次循环,继续下一次循环
ITERATE <标签名>;
- 跳出整个循环
LEAVE <标签名>;