SQL プロシージャーの CASE ステートメント

CASE ステートメントを使用して、満たさなければならない条件の状況に基づいて、条件付きで特定の論理を開始することができます。

CASE ステートメントには、次の 2 つのタイプがあります。
  • 単純 CASE ステートメント (Simple CASE statement): リテラル値に基づいて特定の論理を開始するのに使用します。
  • 検索 CASE ステートメント (Searched CASE statement): 式の値に基づいて特定の論理を開始するのに使用します。

CASE ステートメントの WHEN 節は、制御のフローを決定するために満たしていなければならない値を定義します。

simple-case-statement-when-clause を使用した CASE ステートメントを指定された SQL プロシージャーの例を以下に示します。
  CREATE PROCEDURE UPDATE_DEPT (IN p_workdept)
  LANGUAGE SQL
  BEGIN

    DECLARE v_workdept CHAR(3);
    SET v_workdept = p_workdept;

    CASE  v_workdept
      WHEN 'A00' THEN
        UPDATE department SET deptname = 'D1';
      WHEN 'B01' THEN
        UPDATE department SET deptname = 'D2';
      ELSE
        UPDATE department SET deptname = 'D3';
      END CASE

  END
searched-case-statement-when-clause を使用した CASE ステートメントの例を以下に示します。
  CREATE PROCEDURE UPDATE_DEPT (IN p_workdept)
  LANGUAGE SQL
  BEGIN

    DECLARE v_workdept CHAR(3);
    SET v_workdept = p_workdept;

    CASE
      WHEN v_workdept = 'A00' THEN
        UPDATE department SET deptname = 'D1';
      WHEN v_workdept = 'B01' THEN
        UPDATE department SET deptname = 'D2';
      ELSE
        UPDATE department SET deptname = 'D3';
    END CASE

  END

上記の 2 つのどちらの例も論理的には同等ですが、searched-case-statement-when-clause を使用する CASE ステートメントは非常に強力になりうることに注意することが重要です。 ここでは、サポートされている任意の SQL 式を使用することができます。 この式では、変数、パラメーター、特殊レジスター、その他に対する参照を使用することができます。