目录
一、条件语句
1、if-elseif-else 语句 例子
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test(IN i INT) -- 创建有一个输入参数的存储过程,名称为test
BEGIN
DECLARE a INT; -- 声明变量
SET a = i; -- 赋值给变量
IF a > 0 THEN
SELECT CONCAT(a,' 是大于 0 的');
ELSEIF a = 0 THEN
SELECT CONCAT(a,' 是等于 0 的');
ELSE
SELECT CONCAT(a,' 是小于 0 的');
END IF; -- 结束while循环
END;
CALL test(10); -- 调用存储过程
2、case-when-then 语句 例子
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test(IN i INT) -- 创建有一个输入参数的存储过程,名称为test
BEGIN
DECLARE a INT; -- 声明变量
SET a = i; -- 赋值给变量
CASE a
WHEN a > 0 THEN
SELECT CONCAT(a,' 是大于 0 的');
WHEN a = 0 then
SELECT CONCAT(a,' 是等于 0 的');
ELSE
SELECT CONCAT(a,' 是小于 0 的');
END CASE; -- 结束while循环
END;
CALL test(10); -- 调用存储过程
二、循环语句
1、 while ···· end while 语句 例子
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test() -- 创建无参存储过程,名称为test
BEGIN
DECLARE a INT default 1; -- 声明变量
-- 循环了三次(a 是从 1 开始的)
WHILE a <= 3 DO -- 结束循环的条件: 当 a 大于 3 时跳出 while 循环
SELECT CONCAT( '第 ', a, ' 次循环' );
SET a = a + 1;-- 赋值给变量
END WHILE; -- 结束while循环
END;
CALL test(); -- 调用存储过程
2、repeat···· end repea 语句 例子
它在执行操作后检查结果,而 while 则是执行前进行检查。
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test() -- 创建无参存储过程,名称为test
BEGIN
DECLARE a INT default 1; -- 声明变量
-- 循环了两次(a 是从 1 开始的)
REPEAT
SELECT CONCAT( '第 ', a, ' 次循环' );
SET a = a + 1;-- 赋值给变量
UNTIL a >= 3 -- 结束循环的条件: 当 a 等于 3 时跳出 循环
END REPEAT;
END;
CALL test(); -- 调用存储过程
3、loop ·····end loop 语句 例子
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test() -- 创建无参存储过程,名称为test
BEGIN
DECLARE a INT default 1; -- 声明变量
-- 循环两次(a 是从 1 开始的)
LOOP_LABLE:LOOP
SELECT CONCAT( '第 ', a, ' 次循环' );
SET a = a + 1;-- 赋值给变量
IF a >= 3 THEN -- 结束循环的条件: 当 a 等于 3 时结束循环
LEAVE LOOP_LABLE;
END IF;
END LOOP;
END;
CALL test(); -- 调用存储过程
说明:LABLES 标号可以用在 begin 、repeat、 while 、 loop 语句前,语句标号只能在合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。
4、iterate迭代 例子
ITERATE 通过引用复合语句的标号,来从新开始复合语句:
DROP PROCEDURE IF EXISTS test; -- 如果存在test存储过程则删除
CREATE PROCEDURE test() -- 创建无参存储过程,名称为test
BEGIN
DECLARE a INT DEFAULT 3;
SELECT CONCAT('a的初始值为' ,a);
LOOP_LABLE:LOOP
IF a = 3 THEN
SET a = a + 1;
ITERATE LOOP_LABLE;
END IF;
SELECT CONCAT('此时a的值为' ,a);
SET a = a + 2;
IF a > 10 THEN
LEAVE LOOP_LABLE;
END IF;
END LOOP;
END;
call test ();
若想了解存储过程中的关键语法,可点击此处去了解
希望对你有帮助,文章若有错误,望指出来,谢谢!!!
参考资料:MySQL 存储过程 | 菜鸟教程