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
評估為 true,則執行對應的 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 ;
在此範例中,只有在 n
不等於 m
時才會評估內部 IF
。