15.6.5.2 Оператор IF
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 ;
В этом примере внутренний IF вычисляется только в том случае, если n не равно m.
© 2025 Oracle
Licensed under the GPLv2 License.