Spec-Zone .ru
спецификации, руководства, описания, API
|
IFsearch_condition
THENstatement_list
[ELSEIFsearch_condition
THENstatement_list
] ... [ELSEstatement_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
.