繰返しSQL文を終了し、ループ内の次の繰返し文を開始します。
ITERATEは、参照される繰返し文に応じて、以下に示すアクションを実行します。
ITERATEが指定するラベル | 結果 |
---|---|
FOR文 | カーソルに次の行が存在する場合には、FORループの次の文で実行が続行されます。 カーソルに次の行が存在しない場合には、カーソルが閉じて、FORループの対応するEND FOR終了子の外にある次の文で実行が続行されます。 |
LOOP文 | LOOPブロックの内側にある最初の文は無条件で実行される。 |
REPEAT文 | UNTIL句を評価しないでREPEATループ内の最初の文の実行に移る。 |
WHILE文 | WHILE文の条件式がTUREに評価される場合、WHILEループ内の最初の文で実行が続行されます。 WHILE文の条件式がTRUEに評価されない場合には、ループの対応するEND WHILE終了子の外にある次の文で実行が続行されます。 |
ANSI準拠
ITERATEは、ANSI/ISO SQL:2011に準拠しています。
必要な権限
なし。
呼び出し
実行可能な
ストアド プロシージャのみ。
構文
ITERATE label_name ;
構文要素
- label_name
- 実行される繰返しのラベル名。
使用上の注意
- ITERATEは独立した文ではありません。FOR、LOOP、REPEATまたはWHILE繰返し文と一緒にしか使用できません。
- 文ラベルはITERATEキーワードの直後に続けるSYSUDTLIB。
- ITERATE文では、そのITERATEが組み込まれているBEGIN END複合文に関連付けられているラベルを参照することはできません。
- 文ラベルは、ITERATEが組み込まれている繰返し文に関連づけられているSYSUDTLIB。
- 入れ子のFORループの内側にITERATEを指定し、外側の繰返し文に関連づけられているラベルを参照する場合、外側の繰返し文内でオープンされているすべてのカーソルは、次の繰返しを実行する前にクローズされます。
例: ITERATEを使用したWHILE文の反復
次の例は、ITERATEを使用してWHILE文を繰り返す方法を示しています。
SELECT minNum INTO hminNum FROM limits WHERE LIMIT_TYPE = ’HIGHNUM’; L1: WHILE hCounter > 0 DO INSERT INTO transaction (trans_num, account_num) VALUES (hCounter, hAccountNum); SET hCounter = hCounter - 1; IF hCounter >= hminNum THEN ITERATE L1; END IF; -- The following two statements perform only when -- hCounter < hminNum UPDATE limit SET minNum = hCounter; SET hminNum = hCounter; END WHILE L1;
例: ITERATEを使用した外側のループの反復
次の例は、ITERATE文を使用して外側のループを繰り返す方法を示しています。
LOOP1: WHILE hCounter > 0 DO SELECT highNum INTO maxNum FROM limits WHERE LIMIT_TYPE = 'HIGHNUM'; L1: LOOP INSERT INTO transaction (trans_num, account_num) VALUES (hCounter, hAccountNum); SET hCounter = hCounter - 1; IF (hCounter = 10) THEN IF (hOnceIterated = 0) THEN SET hOnceIterated = 1); ITERATE LOOP L1; END IF; END IF; -- The following statement performs only if -- hCounter <> 10 or hOnceIterated <> 0 SET hNum = hNum + 10; END LOOP L1; IF hCounter >= MaxNum THEN ITERATE LOOP1; END IF; -- The following statement performs only if -- hCounter < MaxNum. INSERT INTO transaction (trans_num, account_num) VALUES (hCounter, hAccountNum); END WHILE LOOP1; UPDATE transaction SET account_num = hAccountNum + 10;
例: ITERATEを使用した外側のFORループの反復
次の例は、ITERATEを使用して外側のFORループを繰り返す方法を示しています。取り出される行がなくなると、カーソルはクローズされ、制御はFORループの外側を繰り返します。
L1: LOOP INSERT INTO transaction (trans_num, account_num) VALUES (hCounter, hAccountNum); SET hCounter = hCounter - 1; FOR RowPointer AS c_customer CURSOR FOR SELECT CustomerNumber AS Number ,CustomerName AS Name ,(Amount + 10000) a FROM customer DO SET hCustNum = RowPointer.Number; IF hCustNum >= 100 THEN ITERATE L1; END IF; -- The following statements perform only if -- hCustNum < 100; else the cursor closes before -- iterating outside the FOR loop block. SET hCustName = RowPointer.Name; SET hAmount = RowPointer.a + RowPointer.a * 0.20; INSERT INTO Cust_temp VALUES (hCustNum, :hCustName); END FOR; SET hNum = hNum + 10; END LOOP L1;