Oracle PL/SQL ループと例
ループとは何ですか?
ループを使用すると、プログラム内のコードの特定の部分を必要な回数だけ実行できます。
このチュートリアルでは、PL/SQL のループの概念とループの制御フローについて説明します。
ループの概念の紹介
ループの概念はコーディングにおいて次のような利点をもたらします。
- コードの再利用性
- コードサイズの縮小
- 簡単な制御の流れ
- 複雑さの軽減
下の図はトイレを示していますping 概念を絵画的に表現する
上図ではループ条件がチェックされ、ループ条件が満たされていれば実行ブロックが実行されます。
各反復では、ループ条件を実際に決定するループ カウンター変数を変更して、制御をループから終了する必要があります。場合によっては、このループ カウンター変数は、定義済みのカウントの増分/減分演算子であり、場合によっては、条件が満たされるまでブロックの実行を継続する検索条件です。
ループ制御ステートメント
ループの概念を学ぶ前に、ループ制御ステートメントを学ぶことが必須です。 ループ制御ステートメントは、ループ内の実行フローを実際に制御するステートメントです。 以下にループ制御文について詳しく説明します。
CONTINUE
このキーワードは、PL/SQL エンジンがループ内でこのキーワードを検出すると、コードの実行ブロック内の残りのコードをスキップし、次の反復がすぐに開始されるようにする指示を PL/SQL エンジンに送信します。 これは主に、ループ内のコードを特定の反復値でスキップしたい場合に使用されます。
終了 / 終了するとき
このキーワードは、PL/SQL エンジンがこのキーワードに遭遇するとすぐに現在のループを終了するという指示を PL/SQL エンジンに送信します。 PL/SQL エンジンがネストされたループ内で EXIT を検出した場合、EXIT は定義されているループから出てきます。つまり、ネストされたループでは、内部ループで EXIT を指定すると、内部ループからコントロールが終了するだけですが、外側のループからではありません。 「EXIT WHEN」の後には、ブール値の結果を与える式が続きます。 結果が TRUE の場合、コントロールは終了します。
GOTO
この文は制御をラベル付き文 (“GOTO ;”) に移します。これには以下の制限があります。
- 制御の移行はサブプログラム内でのみ実行できます。
- 例外処理部から実行部へ制御を移すことはできません
このステートメントの使用は、他に代替手段がない場合を除き推奨されません。コード制御 trac制御権が一方の部門から他方の部門に移管されるため、このプログラムにおける実現可能性は非常に困難になるだろう。
PL/SQLのループの種類
PL / SQLの 次の3種類のループを提供します
- 基本的なループ文
- forループ文
- Whileループ文
基本的なループ文
このループ文は、PL/SQL の最も単純なループ構造です。 実行ブロックはキーワード「LOOP」で始まり、キーワード「END LOOP」で終わります。
制御がループから抜けるように、この実行ブロック内で終了条件を指定する必要があります。
ループを終了するには、実行部分で EXIT キーワードを明示的に指定する必要があります。
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
構文の説明:
- 上記の構文では、キーワード「LOOP」はループの始まりを示し、「END LOOP」はループの終わりを示します。
- 実行ブロックには、EXIT 条件を含む、実行する必要があるすべてのコードが含まれています。
- 実行部分には、任意の実行ステートメントを含めることができます。
注意: EXIT キーワードのない基本的なループ ステートメントは、決して停止しない INFINITE-LOOP になります。
例: この例では、基本的なループ ステートメントを使用して 1 から 5 までの数字を出力します。そのためには、次のコードを実行します。
DECLARE
a NUMBER:=1;
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:=a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END:
/
Code 説明:
- Code ライン2: 変数 'a' を 'NUMBER' データ型として宣言し、値 '1' で初期化します。
- Code ライン4: 「プログラムが開始されました」というメッセージを出力します。
- Code 5行目: キーワード「LOOP」はループの始まりを示します。
- Code 6行目: 「a」の値を出力します。
- Code 7行目: 「a」の値を +1 増やします。
- Code 8行目: 「a」の値が 5 より大きいかどうかを確認します。
- Code 9行目: キーワード「END LOOP」は、実行ブロックの終わりを示します。
- 6 行目から 8 行目のコードは、条件が TRUE を返し、コントロールがループから終了するため、「a」が値 6 に達するまで実行を続けます。
- Code 10行目: 「プログラムが完了しました」というメッセージを印刷する
ループのラベル付け
PL/SQL では、ループにラベルを付けることができます。 ラベルは「<<」と「>>」で囲みます。 特にネストされたループ コードでループにラベルを付けると、読みやすくなります。 ラベルを EXIT コマンドに指定すると、その特定のループを終了できます。 label を使用すると、exit コマンドの後に外側のループの label を指定することで、コントロールがループ内の任意の場所からネストされたループの外側のループを直接終了できるようになります。
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
構文の説明:
- 上記の構文では、out ループの中にもう XNUMX つのループがあります。
- 「<」 >」と「< >' はこれらのループのラベルです。
例この例では、Basic loop ステートメントを使用して 1 から始まる数字を出力します。各数字は、その値と同じ回数だけ出力されます。シリーズの上限は、プログラム宣言部分で固定されています。ラベルの概念を使用してこれを実現する方法を学びましょう。そのために、次のコードを実行します。
DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' );
«outerloop»
LOOP
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/
Code 説明:
- Code 2~3行目: 変数 'a' および 'b' を 'NUMBER' データ型として宣言しています。
- Code ライン4: 変数 'upper_limit' を値 '4' の 'NUMBER' データ型として宣言しています
- Code ライン6: 「プログラムが開始されました」というメッセージを出力します。
- Code 7行目: 外側のループには「outer_loop」というラベルが付けられています。
- Code 9行目: 「a」の値は 1 ずつ増加します。
- Code 11行目: 内側のループには「inner_loop」というラベルが付けられています。
- Code 13行目: 値「a」が「upper_limit」値より大きいかどうかをチェックする EXIT 条件。 そうでない場合はさらに進み、そうでない場合は外側のループを直接終了します。
- Code 14行目: 「b」の値を出力します。
- Code 15行目: 「b」の値を +1 増やします。
- Code 16行目: 「b」の値が「a」より大きいかどうかをチェックする EXIT 条件。 そうであれば、内側のループからコントロールを抜けます。
- Code 14行目: 「プログラムが完了しました」というメッセージを印刷する
製品概要
| ループ | 基本ループ |
| 終了基準 | 実行部分でキーワード「EXIT」が見つかった場合に終了します |
| 使用法 | 特定の条件に基づいて終了しない場合に使用すると便利です。 |






