PL/SQLの実行部「LOOP」文、「WHILE LOOP」文、「FOR LOOP」文、「CONTINUE」文の書き方:超入門「PL/SQL」(5)(1/2 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は「PL/SQLの実行部の書き方」のうち、反復制御(LOOP文)を解説します。
本連載は、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)
(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〜END LOOP間(4〜8行目)の処理を、終了条件に達するまで繰り返し実行します。指定した文字をDBMS_OUTPUT.PUT_LINEによって出力します。
図1に基本LOOP文の内部動作を示しました。LOOP処理を行う際にEXIT WHEN文によって変数v_noの値を評価し、値が3なら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;
(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
サンプルプログラムでは、変数v_noの値が2より小さい間、LOOP処理を続けるように指定しています。LOOP処理を2回実行すると変数v_noの値が2に達します。すると3回目のLOOP処理の開始地点で終了条件に合致して、LOOP処理を終えます。
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対応版】