MySQL 8.4 Release Notes
15.6.5.1 CASE 语句
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
或者:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
CASE 语句用于存储程序实现复杂的条件构造。
Note
此外,还有一个CASE 操作符CASE 语句。见第14.5节,“控制流函数”。CASE 语句不能有ELSE NULL子句,终止于END CASE而不是END。
对于第一个语法,case_value 是一个表达式。这一值与每个WHEN子句的when_value 表达式进行比较,直到找到相等的一对。找到相等的when_value 时,相应的THEN子句statement_list 执行。如果没有相等的when_value,则执行ELSE子句statement_list,如果存在。
由于NULL = NULL为假,因此不能使用该语法来测试等于NULL。请参阅第5.3.4.6节,“处理空值”。
对于第二种语法,每个WHEN子句search_condition表达式直到找到一个真值时,执行其对应的THEN子句statement_list。如果没有search_condition等于测试值,并且CASE语句中没有ELSE子句,会出现Case not found for CASE 语句错误。
如果没有when_value或search_condition匹配测试值,并且CASE语句中没有ELSE子句,会出现Case not found for CASE 语句错误。
每个statement_list由一个或多个SQL语句组成;空的statement_list不允许。
为了处理没有任何WHEN子句匹配的情况,可以使用包含空BEGIN ... END块的ELSE子句,例如(这里的缩进只用于清晰度,不是其他意义)。
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|