Oracle PL/SQL FOR LOOPと例
⚡ スマートサマリー
Oracle PL/SQLのFORループは、指定された下限値と上限値の間で、コードブロックを既知の回数だけ実行します。ループ変数は暗黙的に宣言され、自動的にインクリメントされるため、手動でカウンターを用意する必要はありません。また、REVERSEキーワードを使用すると、ループのカウントダウンを下げて実行できます。

FORループとは何ですか?
「FOR LOOP」文は、何らかの条件に基づいてではなく、既知の回数だけコードを実行したい場合に最適です。
このループでは、下限値と上限値が指定されており、ループ変数がこの範囲内にある限り、ループが実行されます。
ループ変数は自己インクリメント型なので、明示的なインクリメント操作は不要です。ループ変数は暗黙的に宣言されるため、宣言する必要はありません。
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
構文の説明:
- キーワード「FOR」はループの開始を示し、「END LOOP」はループの終了を示します。
- ループ変数は、実行部分を実行する前に毎回評価されます。
- 実行ブロックには、実行する必要のあるすべてのコードが含まれており、任意の実行可能なステートメントを含めることができます。
- loop_variableはループの実行中に暗黙的に宣言され、そのスコープはループ内部のみに限定されます。
- ループ変数が範囲外になると、制御はループから抜ける。
- lower_limit の前にキーワード 'REVERSE' を追加することで、ループを逆順に動作させることができます。
例1: この例では、FORループ文を使用して1から5までの数字を出力します。
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code 説明:
- Code 2行目: 「プログラムが開始されました」というメッセージを表示します。
- Code 3行目: キーワード「FOR」はループの開始を示し、ループ変数「a」が宣言されます。この変数は1から5までの値を取ります。
- Code 5行目: 「a」の値を出力します。
- Code 6行目: キーワード「END LOOP」は、実行ブロックの終了を示します。
- 5行目は「a」の値が6に達するまで実行され続け、その時点で条件が満たされなくなり、制御がループから抜ける。
- Code 7行目: 「プログラムが完了しました」というメッセージを表示します。
ネストされたループ
ループ文はネストすることもできます。外側のループと内側のループは異なる型にすることができます。ネストされたループでは、外側のループが実行されるたびに、内側のループが完全に実行されます。
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
構文の説明:
- 外側のループの内側に、さらにループが1つある。
- ループの種類は問わず、実行機能は同じです。
例1: この例では、FORループ文を使用して1から3までの数字を出力します。各数字は、その値と同じ回数だけ出力されます。
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code 説明:
- Code 2行目: 変数「b」を「NUMBER」データ型として宣言します。
- Code 4行目: 「プログラムが開始されました」というメッセージを表示します。
- Code 5行目: キーワード「FOR」はループの開始を示し、ループ変数「a」が宣言されます。この変数は1から3までの値を取ります。
- Code 7行目: 毎回「b」の値を「1」にリセットします。
- Code 8行目: 内部 whileループ 条件 a>=b をチェックします。
- Code 10行目: 上記の条件が満たされる限り、「a」の値を出力します。
- Code 14行目: 「プログラムが完了しました」というメッセージを表示します。
FORループと逆方向のFORループ
デフォルトでは、FOR ループは下限から上限までカウントアップします。REVERSE キーワードを追加すると、下限から上限までカウントダウンしながら、上限から下限までカウントアップします。ping 制限事項は同じ順序で記載されています。違いが分かりやすいように、両方の形式を以下に並べて表示しています。
| フォーム | ヘッダ | 値の順序 |
|---|---|---|
| 上昇 | IN 1 .. 5 の場合 | 1、2、3、4、5 |
| 下行 | 逆方向の場合 1 .. 5 | 5、4、3、2、1 |
REVERSE を使用した場合でも、下限は上限より先に書き込まれることに注意してください。繰り返し方向が変わるだけです。ループのカウントが事前にわからない場合は、 基本ループ より良い選択です。




