文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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 子句中的 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_valuesearch_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;
  |