Documentation Home

13.6.5.1 CASE 语句

Press CTRL+C to copy
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE

或者:

Press CTRL+C to copy
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_valuesearch_condition匹配测试的值并且CASE语句不包含ELSE子句,则CASE 语句错误结果为 Case not found。

每个statement_list由一个或多个 SQL 语句组成;statement_list不允许 为空 。

要处理没有值与任何 WHEN子句匹配的情况,请使用ELSE 包含空 BEGIN ... END块的 ,如本例所示。(条款中使用的缩进ELSE只是为了清楚起见,并不重要。)

Press CTRL+C to copy
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; |