CASE语法

  1. CASE case_value
  2. WHEN when_value THEN statement_list
  3. [WHEN when_value THEN statement_list] ...
  4. [ELSE statement_list]
  5. END CASE

或者

  1. CASE
  2. WHEN search_condition THEN statement_list
  3. [WHEN search_condition THEN statement_list] ...
  4. [ELSE statement_list]
  5. END CASE

对于存储程序,CASE语句实现了一个复杂的条件结构。

对于第一个语法,case_value是一个表达式,这个值与when_value相比较,如果相等,则进入相应的statement_list,statement_list就是一个语句列表,可以包含多条语句。如果在when_value中没有和case_value相等的值,则进入ELSE里面的statement_list语句列表。

对于第二个语法,每一个WHEN后面的search_condition表达式都会被判断,直到一个表达式的结果为真,然后执行相应的THEN后面的语句序列。如果没有匹配的,则执行ELSE后面的语句列表。

如果when_value或search_condition都没有匹配到相应的值,并且没有写ELSE的时候,会出现a Case not found for CASE statement error results错误。

每个statement_list应该包含一个或多个SQL语句,一个空的statement_list是不允许的。

要处理这种没有匹配,也不想在ELSE里写任何SQL语句的时候,可以在ELSE里写一个空的BEGIN … END 块,如下所示:

  1. DELIMITER |
  2. CREATE PROCEDURE p()
  3. BEGIN
  4. DECLARE v INT DEFAULT 1;
  5. CASE v
  6. WHEN 2 THEN SELECT v;
  7. WHEN 3 THEN SELECT 0;
  8. ELSE
  9. BEGIN
  10. END;
  11. END CASE;
  12. END;
  13. |

原文: https://strongyoung.gitbooks.io/mysql-reference-manual/content/sql_statement_syntax/mysql_compound_statement_syntax/flow_control_statement/case_syntax.html