FOR LOOP文が反復されるたびに、文が実行され、索引が増分または減分され、制御がループの先頭に戻ります。指定された値に索引が達した場合、ループの内側の文によって制御がループの外側に移された場合、または例外が呼び出された場合は、FOR LOOP文が終了します。
ここでのトピック
「statement ::=」を参照してください。
セマンティクス
index
FOR LOOP文に対してローカルな、暗黙に宣言された整変数の名前。ループの外側の文は、indexを参照できません。ループの内側の文はindexを参照できますが、値を変更することはできません。FOR LOOP文の実行後、indexは未定義となります。
[ REVERSE ] lower_bound .. upper_bound
lower_boundおよびupper_boundは、整数に評価されるものにする必要があります(「下限と上限」を参照)。PL/SQLでは、lower_boundとupper_boundはFOR LOOP文に入ったときに一度評価され、一時的なPLS_INTEGER値として格納されます(必要に応じて、最も近い整数に四捨五入されます)。
lower_boundとupper_boundが等しい場合、statementsは一度のみ実行されます。
FOR LOOP文の実行開始時にlower_boundとupper_boundが等しくない場合、次のようになります。
REVERSEが省略されている場合:
lower_boundがupper_boundよりも大きい場合、statementsは実行されず、制御はFOR LOOP文の後の文に移ります。
それ以外の場合は、lower_boundがindexに代入され、statementsが実行され、制御がループの先頭に移り、indexがupper_boundと比較されます。indexがupper_boundよりも小さい場合、indexが1だけ増分され、statementsが再び実行され、制御がループの先頭に戻ります。indexがupper_boundよりも大きい場合、制御がFOR LOOP文の後の文に移ります。
REVERSEが指定されている場合:
upper_boundがlower_boundよりも小さい場合、statementsは実行されず、制御はFOR LOOP文の後の文に移ります。
それ以外の場合は、upper_boundがindexに代入され、statementsが実行され、制御がループの先頭に移り、indexがlower_boundと比較されます。indexがlower_boundよりも大きい場合、indexが1だけ減分され、statementsが再び実行され、制御がループの先頭に戻ります。indexがlower_boundよりも小さい場合、制御がFOR LOOP文の後の文に移ります。
label
for_loop_statementを識別するラベル(「statement ::=」および「label」を参照)。CONTINUE、EXITおよびGOTO文でこのラベルを参照できます。
LOOP文がネストされている場合は特に、ラベルによって読みやすさが向上します。ただし、END LOOP文内のラベルが、同じLOOP文の先頭のラベルと一致している場合のみです(コンパイラではチェックしません)。