Spec-Zone.ru › MySQL 8.4

15.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 оператора, описанного здесь. См. Раздел 14.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 ложно. См. Раздел 5.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-8.4-en/case.html

Spec-Zone.ru

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