IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
存储程序的IF
语句实现了一个基本的条件构造。
笔记
还有一个function,它与这里描述的
语句不同。请参阅
第 12.5 节,“流量控制功能”。该
语句可以有
, , 和
从句,并以 结束
。
IF()
IF
IF
THEN
ELSE
ELSEIF
END IF
如果给定的search_condition
计算结果为真,则执行相应的THEN
or
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