MySQL - 存储过程(3) - 流程控制语句

参考:<>


流程控制语句用于根据条件控制语句的执行。MySQL中流程控制语句有:IF、CASE、LOOP、LEAVE、ITERATE、REPEAT、WHILE。

每个流程中可能包含一个单独语句,或者是使用BEGIN...END构造符合语句,构造可以被嵌套。

一、IF语句

IF语句包含多个条件判断,根据结果为TRUE、FALSE执行语句,与编程语言中的if、else if、else语法类似,其语法格式如下:

IF expr_condition THEN statement_list
    [ELSE expr_condtion THEN statement_list] ...
    [ELSE statement_list]
END IF

示例:

判断正数、负数、既不是正数也不是负数

IF num < -1 THEN
    SELECT 'negative number';
ELSEIF num = 0 THEN
    SELECT 'not positive number or negative number';
ELSE
    SELECT 'positive number';
END IF;


二、CASE语句

CASE是另一个条件判断的语句,类似于编程语言中的choose、when语法,该语句有两种语法格式。

1. 第一种格式

CASE case_expr
    WHEN  value THEN statement_list
    [WHEN value THEN statement_list] ...
    [ELSE statement_list]
END CASE

示例:

判断值等于1、2,或者既不是1也不是2

CASE num
    WHEN 1 THEN SELECT 'num is 1';
    WHEN 2 THEN SELECT 'num is 2';
    ELSE SELECT 'not 1 or 2';
END CASE;

2. 第二种格式

CASE
    WHEN expr_condition THEN statement_list
    [WHEN expr_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

示例:

CASE语句判断正数、负数、既不是正数也不是负数

CASE
    WHEN num < 0 THEN SELECT 'negative number';
    WHEN num = 0 THEN SELECT 'not negative number or positive number';
    ELSE SELECT 'positive number';
END CASE;


三、LOOP语句

循环语句,用来重复执行某些语句。执行过程中可使用LEAVE语句跳出循环,也可以嵌套IF等判断语句。语法格式如下:

[loop_label:] LOOP
    statement_list
END LOOP [loop_label]

注:loop_label表示LOOP语句的标注名称,该参数可以省略。

示例:

num循环执行+1操作,大于等于则跳出循环

DECLARE num INT DEFAULT 0;
loop_add: LOOP
    SET num = num + 1;
    IF num >= 10 THEN
        LEAVE loop_add;
    END IF;
END LOOP add_loop;


四、ITERATE语句

再次循环,该语句作用是将执行顺序转到语句段开头出,与编程语言的continue类似,该语句只可出现在LOOP、REPEAT、WHILE语句内。语法格式如下:

ITERATE label

示例:

num小于10,重复执行+1操作;num大于等于10则退出循环

DECLARE num INT DEFAULT 0;
loop_add: LOOP
    SET num = num + 1;
    IF num < 10 THEN 
        ITERATE loop_add;
    ELSE
        LEAVE loop_add;
    END IF;
END LOOP loop_add;


五、REPEAT语句

创建一个带判断条件的循环过程,每次语句执行完毕之后,会对条件表达式进行判断,若表达式为TRUE则循环结束,否则重复执行。语法类似于编程语言do...while,语法格式:

[repeat_label:] REPEAT
    statement_list
UNTIL expr_condtion
END REPEAT [repeat_label]

示例:

num值小于10之前重复执行+1

DECLARE num INT DEFAULT 0;
REPEAT 
    SET num = num + 1;
UNTIL num >= 10
END REPEAT;


六、WHILE语句

创建一个带判断条件的循环过程,与REPEAT不同,WHILE语句先判断表达式,为真则执行循环内的语句,否则退出循环。与编程语言的while类似。语法格式如下:

[while_label:] WHILE expr_condition DO
    statement_list
END WHILE [while_label]

示例:

num值小于10,重复执行+1

DECLARE num int DEFAULT 0;
WHILE num < 10 DO
    SET num = num + 1;
END WHILE;



你可能感兴趣的:(mysql)