13.6.5.1 CASE 声明
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Or:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
存储程序的CASE语句实现了复杂的条件构造。
Note
还有一个CASE * expr *,与这里描述的CASE 语句不同。参见第 12.4 节“控制流功能”。 CASE语句不能包含ELSE NULL
子句,并且以END CASE
而不是END
终止。
对于第一种语法,* case_value
是一个 table 达式。将此值与每个WHEN
子句中的 when_value
table 达式进行比较,直到其中一个相等。找到相等的 when_value
时,将执行相应的THEN
子句 statement_list
。如果没有 when_value
相等,则执行ELSE
子句 statement_list
*(如果存在)。
此语法不能用于测试与NULL
的相等性,因为NULL = NULL
为 false。参见第 3.3.4.6 节“使用 NULL 值”。
对于第二种语法,将对每个WHEN
子句* search_condition
table 达式求值,直到一个 table 达式为真为止,然后执行其对应的THEN
子句 statement_list
。如果没有 search_condition
相等,则执行ELSE
子句 statement_list
*(如果存在)。
如果没有* when_value
或 search_condition
*与测试的值匹配,并且CASE语句不包含ELSE
子句,则找不到 CASE 语句错误的大小写。
每个* statement_list
由一个或多个 SQL 语句组成;不允许为空 statement_list
*。
要处理任何WHEN
子句不匹配任何值的情况,请使用包含空开始...结束块的ELSE
,如本示例所示。 (在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;
|