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

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 оператор для сохраненных программ реализует сложную условную конструкцию.

Отметить

Есть также a CASE выражение, которое отличается от CASE оператор, описанный здесь. См. Раздел 12.4, "Функции Потока управления". 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 пункт, Случай, не найденный для ошибочных результатов Оператора выбора.

Каждый 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;|