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
语句实现了一个复杂的条件构造。
还有一个operator,它与此处描述的
语句不同。请参阅
第 12.5 节,“流量控制功能”。该
语句不能有
子句,它以
而不是终止。
CASE
CASE
CASE
ELSE NULL
END CASE
END
对于第一个语法,case_value
是一个表达式。该值与
when_value
每个
WHEN
子句中的表达式进行比较,直到其中一个相等。找到相等时when_value
,将执行相应的THEN
子句
statement_list
。如果没有
when_value
相等,则执行该
ELSE
子句
statement_list
(如果有的话)。
此语法不能用于测试是否相等,
NULL
因为NULL = NULL
它是假的。请参阅第 3.3.4.6 节,“使用 NULL 值”。
对于第二种语法,评估每个WHEN
子句
search_condition
表达式直到有一个为真,此时执行其对应的
THEN
子句
statement_list
。如果没有
search_condition
相等,则执行该
ELSE
子句
statement_list
(如果有的话)。
如果没有when_value
或
search_condition
匹配测试的值并且CASE
语句不包含ELSE
子句,则CASE 语句错误结果为 Case not found。
每个statement_list
由一个或多个 SQL 语句组成;statement_list
不允许
为空
。
要处理没有值与任何
WHEN
子句匹配的情况,请使用ELSE
包含空
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;
|