Documentation Home

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

或者:

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只是为了清楚起见,并不重要。)

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;
  |