PL/SQLの実行部「LOOP」文、「WHILE LOOP」文、「FOR LOOP」文、「CONTINUE」文の書き方超入門「PL/SQL」(5)(1/2 ページ)

本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は「PL/SQLの実行部の書き方」のうち、反復制御(LOOP文)を解説します。

» 2017年11月28日 05時00分 公開
[小笠原宏幸株式会社アシスト]

「超入門『PL/SQL』」一覧

 本連載は、Oracle Database向けにデータベース言語 SQL(Structured Query Language)を拡張したプログラミング言語である「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。SQLは知っているけれど、OracleでのPL/SQLは初めてという人向けに、機能の概要と具体的な書き方を解説していきます。

 前回は、PL/SQLの制御機能のうち、条件制御(IF文、CASE文)と順序制御(GOTO文、NULL文)を解説しました。今回はもう1つの制御機能である反復制御(LOOP文)について紹介します。次回解説予定の「カーソル」と併用することが多く、使用頻度が非常に高い機能です。この機会にしっかり習得しましょう。

 LOOP文を使用すると、一連の処理を繰り返し実行できます。今回は、以下の3つのLOOP文について解説します。

  • 反復制御:基本LOOP文
  • 反復制御:FOR LOOP文
  • 反復制御:WHILE LOOP文

 これらを順に解説していきます。LOOP文と組み合わせて使うCONTINUE文についても触れます。

反復制御:基本LOOP文

 基本LOOP文は反復制御のうち、最も基本的です。書式は以下の通りです。

LOOP
  <処理文> -----------------------------(1)
  <条件式> -----------------------------(2)
END LOOP; -----------------------------(3)
基本LOOP文の書式

 (1)で、指定した<処理文>を返し実行します。

 (2)で、<条件式>としてLOOP処理の終了条件を指定します。指定しないとLOOP処理が止まらなくなってしまいます。

 (3)で、基本LOOP文の終了を宣言します。END LOOPに続けて「;」(セミコロン)が必要です。

 (2)の終了条件には指定方法が幾つかあります。今回はEXIT WHEN文を使う方法を解説します。EXIT WHEN文は、SQLのWHERE句と同様の書式で終了条件を指定でき、条件に合致した場合にLOOP処理を終了します。EXIT WHEN文を使用した基本LOOP文のサンプルプログラムは以下の通りです。

DECLARE
  v_no NUMBER(8) := 0;
BEGIN
  LOOP
    v_no := v_no + 1;
      EXIT WHEN v_no = 3;
        DBMS_OUTPUT.PUT_LINE('TEST');
  END LOOP;
END;
/
TEST
TEST
基本LOOP文のサンプルプログラム(EXIT WHEN文を条件式として用いた)

 サンプルプログラムでは、LOOP〜END LOOP間(4〜8行目)の処理を、終了条件に達するまで繰り返し実行します。指定した文字をDBMS_OUTPUT.PUT_LINEによって出力します。

 図1に基本LOOP文の内部動作を示しました。LOOP処理を行う際にEXIT WHEN文によって変数v_noの値を評価し、値が3ならLOOP処理を終了するよう条件を指定しています。

図1 図1 基本LOOP文の内部動作

 図1では基本LOOP文の終了条件にEXIT WHEN文を使用しましたが、他にEXIT文(処理がこの文に到達すると無条件でLOOP処理を終了)やGOTO文(連載第4回)などを使用できます。

反復制御:WHILE LOOP文

 WHILE LOOP文は、LOOPの開始地点で終了条件を指定し、条件に合致するまでLOOP処理を実行します。EXIT WHEN文を使用した基本LOOPと似ていますが、違いがあります。LOOP処理を行う前に条件を判定するため、一度もLOOP処理を実行しない場合があるのです。

WHILE <条件式> LOOP --------------------(1)
  <処理文> -----------------------------(2)
END LOOP;
WHILE LOOP文の書式

 (1)で、WHILE句の後にある<条件式>に、SQLのWHERE句と同様の書式を用いて終了条件を指定します。(2)の処理文には繰り返し実行したい処理内容を記述します。

 以下のサンプルプログラムと図2でWHILE LOOP文の記述方法を確認しましょう。

DECLARE
  v_no NUMBER(8) := 0;
BEGIN
  WHILE v_no < 2 LOOP
    v_no := v_no + 1;
      DBMS_OUTPUT.PUT_LINE('TEST');
  END LOOP;
END;
/
TEST
TEST
WHILE LOOP文のサンプルプログラム
図2 図2 WHILE LOOPの内部動作

 サンプルプログラムでは、変数v_noの値が2より小さい間、LOOP処理を続けるように指定しています。LOOP処理を2回実行すると変数v_noの値が2に達します。すると3回目のLOOP処理の開始地点で終了条件に合致して、LOOP処理を終えます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。