MySQL流程控制
if语句
语法
IF CONDITION THEN
…
[ELSEIF CONDITION THEN]
…
[ELSE]
…
END IF
实践
CREATE PROCEDURE test_if(IN x INT)
BEGIN
IF x>30 THEN SELECT 3;
ELSEIF X>20 THEN SELECT 2;
ELSEIF X>10 THEN SELECT 1;
ELSE SELECT 0;
END IF;
END
case语句
语法
1.CASE VALUE WHEN V1 THEN … [WHEN V2 THEN …] [ELSE …] END CASE
2.CASE WHEN V1 THEN … [WHEN V2 THEN …] [ELSE …] END CASE
实践
CREATE PROCEDURE test_case1(IN score TINYINT(3))
BEGIN
CASE FLOOR(score/10)
WHEN 10 THEN SELECT '优秀';
WHEN 9 THEN SELECT '优秀';
WHEN 8 THEN SELECT '良好';
WHEN 7 THEN SELECT '一般';
WHEN 6 THEN SELECT '及格';
ELSE SELECT '不及格';
END CASE;
END
while语句
语法
WHILE condition DO 循环体 END WHERE;
实践
CREATE PROCEDURE test_while()
BEGIN
declare num INT DEFAULT 1;
declare sum INT DEFAULT 0;
WHILE num <= 100 DO
SET sum = sum + num;
SET num = num + 1;
END WHILE;
SELECT sum;
END
LOOP,LEAVE和ITERATE语句
有两个语句允许您用于控制循环:
LEAVE语句用于立即退出循环,而无需等待检查条件。LEAVE语句的工作原理就类似PHP,C/C++,Java等其他语言的break语句一样。
ITERATE语句允许您跳过剩下的整个代码并开始新的迭代。ITERATE语句类似于PHP,C/C++,Java等中的continue语句。
MySQL还有一个LOOP语句,它可以反复执行一个代码块,另外还有一个使用循环标签的灵活性。
实践
BEGIN
DECLARE sum INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
-- 计算100以内和
l:LOOP
SET i = i + 1;
SET sum = sum + i;
IF i >= 100 THEN LEAVE l;
END IF;
END LOOP l;
SELECT sum;
END
BEGIN
DECLARE sum INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
-- 计算100以内奇数和
l2:LOOP
IF (i < 100) THEN
SET i = i + 1;
IF (i\%2) THEN
SET sum = sum + i;
ELSE ITERATE l2;
END IF;
ELSE LEAVE l2;
END IF;
END LOOP l2;
SELECT sum;
END
repeat语句
语法
REPEAT 循环体 UNTIL condition END REPEAT
实践
CREATE PROCEDURE test_repeat()
BEGIN
declare num INT DEFAULT 1;
declare sum INT DEFAULT 0;
REPEAT
SET sum = sum + num;
SET num = num + 1;
UNTIL num > 100
END REPEAT;
SELECT sum;
END