-- 流程控制
-- if语句
-- 语法
IF 条件表达式 THEN
SQL 语句块
[ELSEIF 条件表达式2 THEN SQL 语句块2]...
[ELSE SQL 语句块3]
END IF;
DELIMITER //
CREATE PROCEDURE ifdemo(IN param INT)
BEGIN
DECLARE var1 INT;
SET var1 = param + 1;
IF var1 > 5 THEN
SELECT * FROM emp WHERE ren_name LIKE '%小';
ELSE
SELECT * FROM emp WHERE ren_name LIKE '威%';
END IF
;
END //
DELIMITER ;
CALL ifdemo(69);
-- case语句
CASE 表达式值
WHEN 值1 THEN sql语句块1
[WHEN 值1 THEN sql语句块2]...
[ELSE sql语句块3]
END CASE
DELIMITER //
CREATE PROCEDURE casedemo(IN param INT)
BEGIN
CASE param
WHEN 1 THEN
UPDATE emp SET salary=salary*1.1;
WHEN 2 THEN
UPDATE emp SET salary=salary*1.2;
ELSE
UPDATE emp SET salary=salary*1.3;
END CASE;
END //
DELIMITER ;
CALL casedemo(3);
SELECT * FROM emp;
-- loop语句及跳转
-- loop语句用来实现简单的循环
[开始标注:]LOOP
语句块
END LOOP[结束标注]
-- 除非“开始标注”存在,否则“结束标注”不能被给出,并且如果两者都出现,它们必须是同样的。
LEAVE label
-- 用于从标注的流程控制构造中退出。它和begin.....end或循环一起被使用。
ITERATE lable
-- 跳过当前循环的剩下的语句,直接进入下一轮循环。
-- ITERATE 只可以出现在LOOP,REPEAT,和WHILE语句内。
DELIMITER //
CREATE PROCEDURE loopdemo(IN param INT)
BEGIN
DECLARE su_m INT;
SET su_m = 0;
label1:LOOP
SET param = param + 1;
SET su_m = su_m+param;
IF param < 10 THEN ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
SELECT su_m;
END //
DELIMITER ;
CALL loopdemo(1);