Press CTRL+C to copyCASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE
或者:
Press CTRL+C to copyCASE 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
只是为了清楚起见,并不重要。)
Press CTRL+C to copyDELIMITER | 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; |