ITERATE ステートメント

ITERATE ステートメントを使用すると、制御のフローがラベル付きループの最初に戻ります。

呼び出し

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

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramITERATElabel

説明

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