Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.