Documentation Home

13.6.5.2 IF 语句

Press CTRL+C to copy
IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF

存储程序的IF语句实现了一个基本的条件构造。

笔记

还有一个function,它与这里描述的 语句不同。请参阅 第 12.5 节,“流量控制功能”。该 语句可以有 , , 和 从句,并以 结束 。 IF() IF IFTHENELSEELSEIFEND IF

如果给定的search_condition计算结果为真,则执行相应的THENor ELSEIF子句 statement_list。如果没有 search_condition匹配项,则执行该 ELSE子句 statement_list

每个statement_list由一个或多个 SQL 语句组成;statement_list不允许 为空 。

与存储程序中使用的IF ... END IF所有其他流控制块一样,块必须以分号结束,如本例所示:

Press CTRL+C to copy
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 不需要这样做),如下所示:

Press CTRL+C to copy
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时才评估内部。 nm