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

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

ITERATE ステートメントを使用した SQL プロシージャーの例を以下に示します。

  CREATE  PROCEDURE ITERATOR()
  LANGUAGE SQL
  BEGIN
    DECLARE v_deptno CHAR(3); DECLARE v_deptname VARCHAR(29); 
    DECLARE at_end INTEGER DEFAULT 0;
    DECLARE not_found CONDITION FOR SQLSTATE '02000';

    DECLARE c1 CURSOR FOR SELECT deptno, deptname  
                          FROM department ORDER BY deptno;
    DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1;
    OPEN c1;
  
    ins_loop: LOOP
  	  FETCH c1 INTO v_deptno, v_deptname; 
        IF at_end = 1 THEN
          LEAVE ins_loop;
        ELSEIF v_dept = 'D11' THEN
          ITERATE ins_loop;
        END  IF;

        INSERT  INTO department (deptno, deptname) 
        VALUES ('NEW', v_deptname);

    END LOOP;

    CLOSE c1;

  END

この例では、取り出された行内の列値が特定の値に一致したときに、ラベル ins_loop を指定して定義されている LOOP ステートメントに制御のフローを戻すために ITERATE ステートメントが使用されています。 ITERATE ステートメントの位置によって、department 表にはまったく値が挿入されなくなります。