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
CASEELSE NULLEND CASEEND
对于第一个语法,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;
|