ストアード・プロシージャーを作成するための SQL プロシージャー型言語の使用

SQL プロシージャー型言語を使用すると、完全に SQL ステートメントで構成されたストアード・プロシージャーを作成することができます。

SQL プロシージャーには、変数の宣言、条件、カーソル、およびハンドラーを組み込むことができます。 また、SQL プロシージャーには、フロー制御、割り当てステートメント、およびリレーショナル・データの定義と操作用の従来の SQL を組み込むこともできます。 これらの拡張機能は、ストアード・プロシージャー作成用のプロシージャー型言語を提供し、SQL 標準の Persistent Stored Modules 部分と整合しています。

以下の例は、単純な SQL プロシージャーを示しています ( CREATE PROCEDURE ステートメントの構文には、ステートメント文節の一部分のみが示されています ) 。

汎用プログラミングインターフェース情報の開始。
CREATE PROCEDURE ITERATOR()  LANGUAGE SQL
BEGIN
     ..
     DECLARE not_found CONDITION FOR SQLSTATE '02000';
     DECLARE c1 CURSOR FOR ....;
     DECLARE CONTINUE HANDLER FOR not_found                    (2)
            SET at_end = 1;
     OPEN c1;
     ftch_loop1: LOOP
         FETCH c1 INTO v_dept, v_deptname, v_admdept;          (1)
         IF at_end = 1 THEN
             LEAVE ftch_loop1;                                 (3)
         ELSEIF v_dept = 'D01' THEN 
         INSERT INTO department (deptno, deptname, admrdept)
                VALUES ( 'NEW', v_deptname, v_admdept);
         END IF;
      END LOOP;
      CLOSE c1;
END
汎用プログラミングインターフェース情報の終了。

この例では、それぞれ次の意味を持つとします。

  • 処理は、ftch_loop1 を進んで行き、1 つの行が検出されると仮定します。
  • FETCH が行を検出しない最初の時点では、処理は HANDLER (1) に入ります。
  • HANDLER では at_end フラグを設定しています。 このプロシージャーでは CONTINUE HANDLER を使用しているため、FETCH (2) の後にある次のステップで処理を継続します。
  • 処理は、CLOSE SQL ステートメント (3) から続行します。