ITERATE ステートメント
ITERATE ステートメントを使用すると、制御のフローがラベル付きループの最初に戻ります。
呼び出し
このステートメントは、以下の対象に組み込むことができます。
- SQL プロシージャー定義
- コンパウンド SQL (コンパイル済み) ステートメント
- コンパウンド SQL (インライン) ステートメント
許可
必要ありません。
構文
説明
- label
- データベース・サーバーが制御のフローを渡す先の FOR 、LOOP、REPEAT、または WHILE ステートメントのラベルを指定します。
例
この例では、カーソルを使用して新しい部門の情報を戻します。 not_found 条件処理ルーチンが呼び出されると、制御のフローがループの外側に渡されます。 v_dept の値が 'D11' の場合、 ITERATE ステートメントは制御のフローを LOOP ステートメントの先頭に戻します。 それ以外の場合は、新しい行が DEPARTMENT 表に挿入されます。
CREATE PROCEDURE ITERATOR()
LANGUAGE SQL
BEGIN
DECLARE v_dept CHAR(3);
DECLARE v_deptname VARCHAR(29);
DECLARE v_admdept CHAR(3);
DECLARE at_end INTEGER DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE c1 CURSOR FOR
SELECT deptno, deptname, admrdept
FROM department
ORDER BY deptno;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
OPEN c1;
ins_loop:
LOOP
FETCH c1 INTO v_dept, v_deptname, v_admdept;
IF at_end = 1 THEN
LEAVE ins_loop;
ELSEIF v_dept = 'D11' THEN
ITERATE ins_loop;
END IF;
INSERT INTO department (deptno, deptname, admrdept)
VALUES ('NEW', v_deptname, v_admdept);
END LOOP;
CLOSE c1;
END