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
子句中的 when_value
運算式進行比較,直到其中一個相等。當找到一個相等的 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 not found for CASE statement 錯誤。
每個 statement_list
由一個或多個 SQL 陳述式組成;不允許空的 statement_list
。
為了處理任何 WHEN
子句都無法比對值的情況,請使用包含空的 BEGIN ... END
區塊的 ELSE
,如本範例所示。(此處在 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;
|