MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
CASEcase_value
WHENwhen_value
THENstatement_list
[WHENwhen_value
THENstatement_list
] ... [ELSEstatement_list
] END CASE
または:
CASE WHENsearch_condition
THENstatement_list
[WHENsearch_condition
THENstatement_list
] ... [ELSEstatement_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; |