Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.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 语句用于存储程序实现复杂的条件构造。

Note

此外,还有一个CASE 操作符CASE 语句。见第14.5节,“控制流函数”CASE 语句不能有ELSE NULL子句,终止于END CASE而不是END

对于第一个语法,case_value 是一个表达式。这一值与每个WHEN子句的when_value 表达式进行比较,直到找到相等的一对。找到相等的when_value 时,相应的THEN子句statement_list 执行。如果没有相等的when_value,则执行ELSE子句statement_list,如果存在。

由于NULL = NULL为假,因此不能使用该语法来测试等于NULL。请参阅第5.3.4.6节,“处理空值”

对于第二种语法,每个WHEN子句search_condition表达式直到找到一个真值时,执行其对应的THEN子句statement_list。如果没有search_condition等于测试值,并且CASE语句中没有ELSE子句,会出现Case not found for CASE 语句错误。

如果没有when_valuesearch_condition匹配测试值,并且CASE语句中没有ELSE子句,会出现Case not found for CASE 语句错误。

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

为了处理没有任何WHEN子句匹配的情况,可以使用包含空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;
  |