ストアード・プロシージャーを作成するための 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) から続行します。