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 表にはまったく値が挿入されなくなります。