Spec-Zone .ru
спецификации, руководства, описания, API

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.4, "Функции Потока управления". 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.