Оператор CASE
Синтаксис
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Или:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Описание
На этой странице описан оператор CASE для хранимых программ. Подробности об операторе CASE вне хранимых программ см. в ОПЕРАТОРЕ CASE.
Оператор CASE для хранимых программ реализует сложное условное выражение. Если условие search_condition истинно, выполняется соответствующий список SQL-команд. Если ни одно из условий поиска не выполняется, выполняется список команд в разделе ELSE . Каждый statement_list состоит из одной или нескольких команд.
Оператор CASE не может содержать раздел ELSE NULL, и он завершается END CASE вместо END. Он реализует сложное условное выражение. Если условие search_condition истинно, выполняется соответствующий список SQL-команд. Если ни одно из условий поиска не выполняется, выполняется список команд в разделе ELSE . Каждый statement_list состоит из одной или нескольких команд.
Если ни одно из значений when_value или условий поиска не соответствует проверяемому значению, а оператор CASE не содержит раздела ELSE, возникает ошибка «Case not found for CASE».
Каждый список_команд состоит из одной или нескольких команд; пустой statement_list не допускается. Для обработки ситуаций, когда ни одно значение не соответствует какому-либо разделу WHEN, используйте раздел ELSE, содержащий пустой блок BEGIN ... END, как показано в этом примере:
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE BEGIN END;
END CASE;
END;
|
Отступы в разделе ELSE здесь используются только для ясности и не имеют иного значения. Подробнее об использовании команды delimiter см. в разделе Разделители в клиенте MariaDB.
Примечание: Синтаксис оператора CASE в хранимых программах немного отличается от синтаксиса выражения SQL CASE, описанного в ОПЕРАТОРЕ CASE. Оператор CASE не может содержать раздел ELSE NULL, и он завершается END CASE вместо END.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/case-statement/