PL/SQLの実行部「IF」文、「CASE」文、「GOTO」文、「NULL」文の書き方:超入門「PL/SQL」(4)(2/2 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回から「PL/SQLの実行部の書き方」を順に解説していきます。
順次制御:GOTO文
PL/SQLブロックは通常、上から記述順に処理されていきます。しかし、「GOTO文」を使うとPL/SQLブロック内の任意の位置に制御を移すことができます。書式は以下の通りです。移動先はラベルで指定します。
GOTO ラベル名; <<ラベル名>>
ラベルとはプログラムの任意の位置を示すマークであり、宣言部で定義する必要はありません。移動先のラベルは「<< >>」(半角二重ギュメ)で囲みます。サンプルプログラムは以下の通りです。
BEGIN GOTO label_1; DBMS_OUTPUT.PUT_LINE('処理1'); DBMS_OUTPUT.PUT_LINE('処理2'); <<label_1>> DBMS_OUTPUT.PUT_LINE('ラベル処理'); END; / ラベル処理
PL/SQLブロックの2行目でGOTO文が処理されると、即座に5行目のラベルlebel_1に制御が移ります。その間の3行目、4行目は処理されません。
ただしGOTO文を乱用すると、処理の流れを把握しにくくなります。アプリケーションのデバッグのみで使うといった程度にとどめておくことを筆者は勧めています。
順次制御:NULL文
NULL文は「何も処理しない」ことを明確にして、次に制御を移したい場合に使います。
例えば、IF文ではELSE句の指定は必須ではありません。そこで「ELSE NULL」と記述することで、「その他の条件に対して何も処理する必要がない」という意図を明確に示すことができます。これは、プログラムの作成者“以外の人”に示したい場合に有効です。
DECLARE v_no NUMBER(8) := 3; BEGIN IF v_no = 1 THEN DBMS_OUTPUT.PUT_LINE('代入されている値は1'); ELSE NULL; END IF; END; /
いかがでしたでしょうか。特に条件制御のIF文とCASE文を習得すると、PL/SQLでの処理の幅が大きく広がります。この機会にしっかり押さえておきましょう。
次回は、もう1つの制御機能である「反復制御」を解説します。
筆者紹介
小笠原宏幸(おがさわら ひろゆき)
株式会社アシスト データベース技術本部所属。普段は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対応版】