Spec-Zone.ru › MySQL 5.7

13.6.5.1 Оператор 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 оператора, описанного здесь. См. Раздел 12.5, «Функции управления потоком». Оператор CASE не может иметь ELSE NULL-клаузу, и он завершается END CASE вместо END.

Для первого синтаксиса case_value — это выражение. Это значение сравнивается со значением выражения when_value в каждой WHEN-клаузе, пока одно из них не будет равно. Когда найдено равное when_value, соответствующая THEN-клауза statement_list выполняется. Если ни одно значение when_value не равно, выполняется ELSE-клауза statement_list, если она есть.

Этот синтаксис не может использоваться для проверки на равенство с NULL, потому что NULL = NULL ложно. См. Раздел 3.3.4.6, «Работа с NULL-значениями».

Для второго синтаксиса каждая WHEN-клауза search_condition-выражение вычисляется, пока одно из них не станет истинным, в этот момент выполняется соответствующая THEN-клауза statement_list. Если ни одно значение search_condition не равно, выполняется ELSE-клауза statement_list, если она есть.

Если ни when_value, ни search_condition не соответствуют проверенному значению, и оператор CASE не содержит ELSE-клаузы, возникает ошибка Оператор CASE не найден.

Каждая statement_list состоит из одной или нескольких SQL-команд; пустая statement_list недопустима.

Для обработки ситуаций, когда ни одна WHEN-клауза не соответствует значению, используйте ELSE, содержащую пустой блок BEGIN ... END, как показано в этом примере. (Отступы в ELSE-клаузе здесь используются только для наглядности и не имеют иного значения.)

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;
  |

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

Spec-Zone.ru

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