LOOP、EXIT、CONTINUE、WHILE、およびFORステートメントを使用して、SPLプログラムが一連のステートメントを繰り返すように手配できます。
LOOP
ループ
ステートメント
エンドループ;
LOOPは、EXITまたはRETURNステートメントによって終了するまで無期限に繰り返される無条件ループを定義します。
出口
EXIT [ WHEN式];
最も内側のループは終了し、次にEND loopに続くステートメントが実行される。
WHENが存在する場合、指定された条件がTRUEの場合にのみループ終了が発生します。 それ以外の場合、EXITの後のステートメントに制御が渡されます。
EXITを使用して、すべてのタイプのループを早期に終了させることができます。 無条件ループでの使用に限定されません。
次の簡単な例は、10回反復してからEXITステートメントを使用して終了するループを示しています。
DECLARE
v_counter番号 (2);
開始
v_counter := 1;
LOOP
v_counter > 10のときに終了します。
DBMS_OUTPUT.PUT_LINE('Iteration # '| | v_counter);
v_counter := v_counter + 1;
エンドループ;
エンド;
このプログラムから次の出力が生成されます。
イテレーション #1
イテレーション #2
イテレーション #3
イテレーション #4
イテレーション #5
イテレーション #6
イテレーション #7
イテレーション #8
イテレーション #9
イテレーション #10
CONTINUE
CONTINUEステートメントは、介在するステートメントをスキップしながら、ループの次の反復を進める方法を提供します。
CONTINUEステートメントに遭遇すると、最も内側のループの次の反復が開始され、CONTINUEステートメントに続くすべてのステートメントがループの終わりまでスキップされます。 制御は、ループ制御式 (存在する場合) に戻され、ループの本体が再評価される。
WHEN句が使用されている場合、when句で指定された式がTRUEに評価された場合にのみ、ループの次の反復が開始されます。 それ以外の場合、CONTINUEステートメントに続く次のステートメントに制御が渡されます。
CONTINUEステートメントは、ループの外では使用できません。
次の例は、CONTINUEステートメントを使用して奇数の表示をスキップする前の例のバリエーションを示しています。
DECLARE
v_counter番号 (2);
開始
v_counter := 0;
LOOP
v_counter := v_counter + 1;
v_counter > 10のときに終了します。
MOD(v_counter、2) = 1のときに継続します。
DBMS_OUTPUT.PUT_LINE('Iteration # '| | v_counter);
エンドループ;
エンド;
上記のプログラムから次の出力が生成されます。
イテレーション #2
イテレーション #4
イテレーション #6
イテレーション #8
イテレーション #10
白い
WHILE式ループ
ステートメント
エンドループ;
WHILEステートメントは、条件式がTRUEに評価される限り、ステートメントのシーケンスを繰り返します。 条件は、ループ本体への各エントリの直前にチェックされます。
次の例には、前の例と同じロジックが含まれていますが、EXITステートメントの代わりにWHILEステートメントを使用して、ループを終了するタイミングを決定します。
DECLARE
v_counter番号 (2);
開始
v_counter := 1;
v_counter <= 10ループ
DBMS_OUTPUT.PUT_LINE('Iteration # '| | v_counter);
v_counter := v_counter + 1;
エンドループ;
エンド;
この例では、前の例と同じ結果が得られる。
イテレーション #1
イテレーション #2
イテレーション #3
イテレーション #4
イテレーション #5
イテレーション #6
イテレーション #7
イテレーション #8
イテレーション #9
イテレーション #10
FOR (整数バリアント)
FOR name IN [REVERSE] expression .. 式ループ
ステートメント
エンドループ;
FORのこの形式は、整数値の範囲を反復するループを作成します。 name変数はINTEGER型として自動的に定義され、ループ内にのみ存在します。 ループ範囲を与える2つの式は、ループに入るときに1回評価されます。 反復ステップは + 1で、名前は式の左の値で始まります。 の右側の式の値を超えると、nameが終了します... したがって、2つの式は次の役割を果たします。start-value .. end-value。
オプションのREVERSE句は、ループを逆の順序で反復する必要があることを指定します。 名前が最初にループを通過するとき、nameは右端の式の値に設定されます。 nameが最左の式より小さい場合、ループは終了します。
次の例では、1から10を繰り返すFORループを使用して、WHILEループの例をさらに簡略化します。
BEGIN
FOR i IN 1 .. 10ループ
DBMS_OUTPUT.PUT_LINE('Iteration # '| | i);
エンドループ;
エンド;
FORステートメントから次の出力が生成されます。
イテレーション #1
イテレーション #2
イテレーション #3
イテレーション #4
イテレーション #5
イテレーション #6
イテレーション #7
イテレーション #8
イテレーション #9
イテレーション #10
開始値が終了値より大きい場合、ループ本体は実行されません。 次の例に示すように、エラーは発生しません。
BEGIN
FOR i IN 10 .. 1ループ
DBMS_OUTPUT.PUT_LINE('Iteration # '| | i);
エンドループ;
エンド;
ループ本体が実行されないため、この例からの出力はありません。