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;
|