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

» 2017年11月28日 05時00分 公開
[小笠原宏幸株式会社アシスト]
前のページへ 1|2       

反復制御:FOR LOOP文

 FOR LOOP文は基本LOOP文やWHILE LOOP文とは異なり、指定した回数に達するまで、一連の処理を繰り返し実行します。繰り返す回数が明確な場合に便利です。書式は以下の通りです。

FOR <ループカウンタ名> IN [ REVERSE ] <初期値>..<終了値> LOOP ---(1)
  <処理文> -----------------------------(2)
END LOOP;
FOR LOOP文の書式

 (1)にあるループカウンタとは、FOR LOOP内で使用できる変数です。任意の文字を利用できます。暗黙的に宣言されるため、「v_no」のように明示的に宣言する必要はありません。

 最初にループカウンタに、<初期値>が代入され、1回LOOP処理を行うごとに1ずつループカウンタの値が増えます。ループカウンタの値が<終了値>に達するとLOOP処理を終了します。

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

BEGIN
  FOR i IN 1..2 LOOP
    DBMS_OUTPUT.PUT_LINE(i);
  END LOOP;
END;
/
1
2
FOR LOOP文のサンプルプログラム
図3 図3 FOR LOOPの内部動作

 サンプルプログラムでは、ループカウンタとしてiを指定しました。ループカウンタの値が2に達するまでの間、DBMS_OUTPUT.PUT_LINEでループカウンタiの値を出力し続けます。

 1回目のLOOP処理を終え、2回目に入るとループカウンタiの値は2になります。終了値を2としているため、END LOOPまでの処理を実行するとLOOP処理が終了します。

 ループカウンタには通常の変数とは異なる注意点が、幾つかあります。

  • ループカウンタ名を宣言部で定義する必要はない
  • 宣言部で定義した変数名をループカウンタ名として使うことはできない
  • ループカウンタには明示的に値を代入できない
  • REVERSEオプションを指定すると、初めにループカウンタに<終了値>が代入される。<初期値>に達するまでLOOP処理を繰り返し、ループカウンタの値が1つずつ減っていく

反復制御:CONTINUE文

 特定のLOOP処理をスキップするかどうか、制御ができるCONTINUE文を最後に紹介します。

 CONTINUE文はOracle Database 11g Release1で、PL/SQLに追加されました。CONTINUE文内で条件を指定し、条件に合致した場合、END LOOPまでの処理をスキップします。そして、ループの開始地点に制御を移し、次のLOOP処理に進みます。ループを抜けてしまうのではありません。

 実際にサンプルプログラムと図4で動作と記述方法を確認しましょう。

BEGIN
  FOR i IN 1..3 LOOP
    CONTINUE WHEN i = 2;
      DBMS_OUTPUT.PUT_LINE(i);
  END LOOP;
END;
/
1
3
CONTINUE文のサンプルプログラム
図4 図4 CONTINUE文の内部動作

 このプログラムでは、「CONTINUE WHEN i = 2」となっているため、ループカウンタiが2(つまり2回目のLOOP処理)の場合にEND LOOPまでの処理をスキップします。実行結果を見ると、ループカウンタの値2が表示されていません。確かに2回目のLOOP処理をスキップしていることが分かります。

 このように、CONTINUE文は特定の値に対して処理を行いたくない場合に便利です。

 次回は、データベースから取り出したデータを処理するために必要な「カーソル」を解説します。

著者紹介

小笠原 宏幸

株式会社アシスト データベース技術本部所属。

普段はOracle、PostgreSQL、JP1などの分野で研修講師を担当。また、書籍「SQL逆引き大全363の極意」(株式会社秀和システム)をはじめ、「これならわかるOracle超入門教室」(株式会社翔泳社)、「プロとしてのPL/SQL入門」(SBクリエイティブ株式会社)の共著も担当。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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