1、IF---THEN---ELSEIF---THEN---ELSE---END IF 语句
语法
IF 条件 THEN
SQL逻辑;
ELSEIF 条件 THEN
SQL逻辑;
ELSE
SQL逻辑;
END IF;
示例
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
IF score >= 85 THEN
SET result = '优秀';
ELSEIF score >= 60 THEN
SET result = '及格';
ELSE
SET result = '不及格';
END IF;
END //
DELIMITER ;
执行存储过程
CALL procedureTest(90 ,@result);
SELECT @result;
2、CASE---WHEN---THEN---ELSE---END CASE语句
语法
CASE 参数
WHEN 值 THEN
SQL逻辑;
WHEN 值 THEN
SQL逻辑;
ELSE
SQL逻辑;
END CASE;
CASE
WHEN 条件 THEN
SQL逻辑;
WHEN 条件 THEN
SQL逻辑;
ELSE
SQL逻辑;
END CASE;
示例
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
CASE score
WHEN 100 THEN
SET result = '优秀';
WHEN 60 THEN
SET result = '及格';
ELSE
SET result = '不及格';
END CASE;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
CASE
WHEN score >= 85 THEN
SET result = '优秀';
WHEN score >= 60 THEN
SET result = '及格';
ELSE
SET result = '不及格';
END CASE;
END //
DELIMITER ;
执行存储过程
CALL procedureTest(60 ,@result);
SELECT @result;
3、WHILE---DO---END WHILE语句
先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑
语法
WHILE 条件 DO
SQL逻辑;
END WHILE;
示例
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
WHILE score < 60 DO
SET score = score + 1;
SET result = '加分到及格';
END WHILE;
END //
DELIMITER ;
执行存储过程
CALL procedureTest(30 ,@result);
SELECT @result;
4、REPEAT---UNTIL---END REPEAT 语句(重复操作直到条件满足才停止)
先执行一次逻辑,然后判定逻辑是否满足,如果满足,则退出。如果不满足,则继续下
一次循环
语法
REPEAT
SQL逻辑;
UNTIL 条件
END REPEAT;
示例
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
REPEAT
SET score = score + 1;
SET result = '加分到及格';
UNTIL score >= 60
END REPEAT;
END //
DELIMITER ;
执行存储过程
CALL procedureTest(30 ,@result);
SELECT @result;
5、LOOP---ITERATE---LEAVE---END LOOP 语句
ITERATE 循环体名称:直接进入下一次循环
LEAVE 循环体名称:退出指定标记的循环体(注意一定要使用 LEAVE 退出循环,否则会无限执行下去)
语法
循环体名称:LOOP
IF 条件 THEN
SQL逻辑;
-- 直接进入下一次循环
ITERATE 循环体名称;
END IF;
IF 条件 THEN
SQL逻辑;
-- 退出指定标记的循环体
LEAVE 循环体名称;
END IF;
END LOOP;
示例
DELIMITER //
CREATE PROCEDURE procedureTest(IN score INT, OUT result VARCHAR(10))
BEGIN
loop_test:LOOP
IF score < 60 THEN
SET score = score + 1;
-- 直接进入下一次循环
ITERATE loop_test;
END IF;
IF score >= 60 THEN
SET result = '加分到及格';
-- 退出指定标记的循环体
LEAVE loop_test;
END IF;
END LOOP;
END //
DELIMITER ;
执行存储过程
CALL procedureTest(30 ,@result);
SELECT @result;