CASE ステートメント

CASE ステートメントは、複数の条件に基づいて実行パスを選択します。 CASE ステートメントを CASE 式と混同しないでください。 CASE 式を使用すると、1 つ以上の条件の評価に基づいて 1 つの式を選択できます。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン化) ステートメント
コンパウンド SQL ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 CASE ステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

CASE ステートメントを呼び出すために、特権は必要ありません。 ただし、ステートメントの許可 ID によって保持される特権には、CASE ステートメントに組み込まれている SQL ステートメントおよび式を呼び出すために必要なすべての特権が含まれていなければなりません。

構文

Read syntax diagramSkip visual syntax diagramCASEsearched-case-statement-when-clausesimple-case-statement-when-clauseEND CASE
simple-case-statement-when-clause
Read syntax diagramSkip visual syntax diagramexpressionWHENexpressionTHENSQL-procedure-statement;ELSESQL-procedure-statement;
searched-case-statement-when-clause
Read syntax diagramSkip visual syntax diagramWHENsearch-conditionTHENSQL-procedure-statement;ELSESQL-procedure-statement;

説明

CASE
case-statement を開始します。
単純ケース・ステートメントの WHEN 文節
最初の WHEN キーワードの前の expression (式) の値が、 その WHEN キーワードの後にある各 expression の値と等しいかどうかが検査されます。 検索条件が真の場合、THEN ステートメントが実行されます。 結果が不明または偽の場合、処理は次の検索条件まで継続されます。 結果が検索条件のいずれにも一致せず、なおかつ ELSE 節が使用されている場合、 ELSE 節内のステートメントが処理されます。
検索ケース・ステートメントの WHEN 文節
WHEN キーワードの後の search-condition が評価されます。 真であると評価された場合、関連する THEN 節内のステートメントが評価されます。 偽または不明であると評価された場合、次の search-condition が評価されます。 真であると評価される search-condition がなく、 なおかつ ELSE 節が使用されている場合、ELSE 節内のステートメントが処理されます。
SQL プロシージャー・ステートメント
呼び出すステートメントを指定します。 コンパウンド SQL (コンパイル済み) ステートメントの SQL-procedure-statement を参照してください。
END CASE
case-statement を終了します。

  • WHEN で指定した条件がすべて真ではなく、なおかつ ELSE 節が指定されていない場合、 実行時にエラーが出され、CASE ステートメントの実行が終了します (SQLSTATE 20000)。
  • 使用する CASE ステートメントでは、考えられるあらゆる実行条件を全て網羅するようにしてください。

SQL 変数 v_workdept の値に応じて、表 DEPARTMENT の列 DEPTNAME を適切な名前で更新します。

  • 例 1: 以下の例では、simple-case-statement-when-clause の構文を使用して、 これを行う方法を示しています。
       CASE v_workdept
         WHEN'A00'
           THEN UPDATE department
           SET deptname = 'DATA ACCESS 1';
         WHEN 'B01'
           THEN UPDATE department
           SET deptname = 'DATA ACCESS 2';
         ELSE UPDATE department
           SET deptname = 'DATA ACCESS 3';
       END CASE
  • 例 2: 以下の例では、searched-case-statement-when-clause の構文を使用して、 これを行う方法を示しています。
       CASE
         WHEN v_workdept = 'A00'
           THEN UPDATE department
           SET deptname = 'DATA ACCESS 1';
         WHEN v_workdept = 'B01'
           THEN UPDATE department
           SET deptname = 'DATA ACCESS 2';
         ELSE UPDATE department
           SET deptname = 'DATA ACCESS 3';
       END CASE