MySQL 9.0 发行说明
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
用于存储程序的 IF
语句实现了一个基本的条件构造。
注意
还有一个 IF()
函数,它与这里描述的 IF
语句 不同。参见 第 14.5 节,“流控制函数”。 IF
语句可以包含 THEN
、ELSE
和 ELSEIF
子句,并以 END IF
结束。
如果给定的 search_condition
评估为真,则执行相应的 THEN
或 ELSEIF
子句 statement_list
。如果没有任何 search_condition
匹配,则执行 ELSE
子句 statement_list
。
每个 statement_list
由一个或多个 SQL 语句组成;不允许使用空 statement_list
。
一个 IF ... END IF
块,与存储程序中使用的所有其他流控制块一样,必须以分号结尾,如以下示例所示
DELIMITER //
CREATE FUNCTION SimpleCompare(n INT, m INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE s VARCHAR(20);
IF n > m THEN SET s = '>';
ELSEIF n = m THEN SET s = '=';
ELSE SET s = '<';
END IF;
SET s = CONCAT(n, ' ', s, ' ', m);
RETURN s;
END //
DELIMITER ;
与其他流控制结构一样,IF ... END IF
块可以嵌套在其他流控制结构中,包括其他 IF
语句。每个 IF
必须以它自己的 END IF
结尾,后面跟着一个分号。您可以使用缩进使嵌套的流控制块更容易被人阅读(尽管这不是 MySQL 的要求),如下所示
DELIMITER //
CREATE FUNCTION VerboseCompare (n INT, m INT)
RETURNS VARCHAR(50)
BEGIN
DECLARE s VARCHAR(50);
IF n = m THEN SET s = 'equals';
ELSE
IF n > m THEN SET s = 'greater';
ELSE SET s = 'less';
END IF;
SET s = CONCAT('is ', s, ' than');
END IF;
SET s = CONCAT(n, ' ', s, ' ', m, '.');
RETURN s;
END //
DELIMITER ;
在这个例子中,内部的 IF
只有在 n
不等于 m
时才会被执行。