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语句实现了一个复杂的条件结构。
对于第一个语法,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 块,如下所示:
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;
|