暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 -复合语句(5) - 流控制语句 - CASE 语句

林员外聊编程 2020-12-17
205
流控制语句
 
MySQL 支持 IFCASEITERATELEAVE LOOPWHILE REPEAT 结构,用于存储程序中的流程控制。它还支持存储函数内的 RETURN 关键字。
 
这些结构中有许多包含其他语句,如以下部分中的语法规范所示。这样的构造可以嵌套。例如,IF 语句可能包含 WHILE 循环,而 WHILE 循环本身包含 CASE 语句。
 
MySQL不支持 FOR 循环。
 
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 运算符,它与这里描述的 CASE 语句不同。CASE 语句不能有 ELSE NULL 子句,它以 END CASE 而不是 END 终止。
 
对于第一种语法,case_value 是一个表达式。将此值与每个 WHEN 子句中的 when_value 表达式进行比较,直到其中一个相等为止。当找到相等的 when_value 时,将执行相应的 THEN 子句 statement_list。如果没有等于 when_value 的情况,则执行 ELSE 子句 statement_list(如果有此子句)。
 
此语法不能用于测试是否等于 NULL,因为 NULL = NULL 为结果返回 false
 
对于第二种语法,每个 WHEN 子句 search_condition 表达式都将被求值,直到其中一个表达式为 true,此时将执行相应的 THEN 子句 statement_list。如果没有相等的 search_condition,则执行 ELSE 子句 statement_list(如果有)。
 
如果没有 when_value  search_condition 与测试的值匹配,并且 CASE 语句不包含 ELSE 子句,则将发生 CASE 语句无法匹配的错误。
 
每个 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;
|
复制
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/flow-control-statements.html
https://dev.mysql.com/doc/refman/8.0/en/case.html
 

文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论