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
文の先頭のラベルと一致している場合のみです(コンパイラではチェックしません)。