PL/SQLの実行部「LOOP」文、「WHILE LOOP」文、「FOR LOOP」文、「CONTINUE」文の書き方:超入門「PL/SQL」(5)(2/2 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は「PL/SQLの実行部の書き方」のうち、反復制御(LOOP文)を解説します。
反復制御:FOR LOOP文
FOR LOOP文は基本LOOP文やWHILE LOOP文とは異なり、指定した回数に達するまで、一連の処理を繰り返し実行します。繰り返す回数が明確な場合に便利です。書式は以下の通りです。
FOR <ループカウンタ名> IN [ REVERSE ] <初期値>..<終了値> LOOP ---(1) <処理文> -----------------------------(2) END 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
サンプルプログラムでは、ループカウンタとして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 WHEN i = 2」となっているため、ループカウンタiが2(つまり2回目のLOOP処理)の場合にEND LOOPまでの処理をスキップします。実行結果を見ると、ループカウンタの値2が表示されていません。確かに2回目のLOOP処理をスキップしていることが分かります。
このように、CONTINUE文は特定の値に対して処理を行いたくない場合に便利です。
次回は、データベースから取り出したデータを処理するために必要な「カーソル」を解説します。
著者紹介
小笠原 宏幸
株式会社アシスト データベース技術本部所属。
普段はOracle、PostgreSQL、JP1などの分野で研修講師を担当。また、書籍「SQL逆引き大全363の極意」(株式会社秀和システム)をはじめ、「これならわかるOracle超入門教室」(株式会社翔泳社)、「プロとしてのPL/SQL入門」(SBクリエイティブ株式会社)の共著も担当。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- DBエンジンを最大限に生かすバッチアプリの作り方
第1回では、バッチアプリケーションを設計するうえで考慮すべき4つのポイントについて解説しました。今回は、Oracleデータベースを最大限に利用したバッチアプリケーションの実装テクニックについて解説します。 - ODTを使ったVisual StudioからのPL/SQL開発
オラクル社が提供する3つの.NET環境用開発ツール「ODP.NET」「ODT」「ODE.NET」。Oracle 10gリリース2に対応した最新版を使って、Oracleデータベースを前提とした.NETアプリケーションの開発手法を解説する。(編集部) - 更新/挿入/削除のSQLを高速化する3つの技とは?
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局) - 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】