このページは機械翻訳したものです。
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 statement とは異なる CASE operator もあります。 セクション12.5「フロー制御関数」を参照してください。 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_value も search_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;
|