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 為 false。請參閱第 5.3.4.6 節「處理 NULL 值」。
對於第二種語法,會評估每個 WHEN 子句 search_condition 表達式,直到其中一個為 true,此時會執行其對應的 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;
|