Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


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 ステートメントは、複雑な条件構造構文を実装します。

注記

ここで説明されている CASE ステートメントとは異なる CASE も存在します。セクション12.4「制御フロー関数」を参照してください。CASE ステートメントは ELSE NULL 句を持つことができず、END でなく、END CASE で終了します。

最初の構文の場合、case_value は式です。この値は、各 WHEN 句内の when_value 式のいずれかに等しくなるまで、それらの式と比較されます。等しい when_value が見つかると、対応する THEN 句の statement_list が実行されます。どの when_value も等しくない場合は、ELSE 句の statement_list が実行されます (この句が存在する場合)。

NULL = NULL は false であるため、この構文を NULL と等しいかどうかのテストに使用することはできません。セクション3.3.4.6「NULL 値の操作」を参照してください。

2 番目の構文の場合、各 WHEN 句の search_condition 式のいずれかが true になるまでそれらの式が評価され、いずれかが true になった時点で、それに対応する THEN 句の statement_list が実行されます。どの search_condition も等しくない場合は、ELSE 句の statement_list が実行されます (この句が存在する場合)。

どの when_valuesearch_condition もテストされた値に一致せず、かつ CASE ステートメントに ELSE 句が含まれていない場合は、Case not found for CASE statement エラーになります。

statement_list は、1 つ以上の 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;
  |

User Comments
Sign Up Login You must be logged in to post a comment.