Spec-Zone.ru › MySQL 5.7

13.6.5.2 Оператор IF

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

Оператор IF для хранимых программ реализует базовый условный конструкт.

Примечание

Также существует функция IF() функция, которая отличается от оператора IF оператора, описанного здесь. См. Раздел 12.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.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/if.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API