連載
» 2017年09月06日 05時00分 公開

超入門「PL/SQL」(4):PL/SQLの実行部「IF」文、「CASE」文、「GOTO」文、「NULL」文の書き方 (2/2)

[小笠原宏幸,株式会社アシスト]
前のページへ 1|2       

順次制御:GOTO文

 PL/SQLブロックは通常、上から記述順に処理されていきます。しかし、「GOTO文」を使うとPL/SQLブロック内の任意の位置に制御を移すことができます。書式は以下の通りです。移動先はラベルで指定します。

GOTO  ラベル名;
<<ラベル名>>
GOTO文の書式

 ラベルとはプログラムの任意の位置を示すマークであり、宣言部で定義する必要はありません。移動先のラベルは「<< >>」(半角二重ギュメ)で囲みます。サンプルプログラムは以下の通りです。

BEGIN
  GOTO label_1;
    DBMS_OUTPUT.PUT_LINE('処理1');
    DBMS_OUTPUT.PUT_LINE('処理2');
    <<label_1>>
    DBMS_OUTPUT.PUT_LINE('ラベル処理');
END;
/
ラベル処理
GOTO文のサンプルプログラム

 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;
/
NULL文のサンプルプログラム

 いかがでしたでしょうか。特に条件制御のIF文とCASE文を習得すると、PL/SQLでの処理の幅が大きく広がります。この機会にしっかり押さえておきましょう。

 次回は、もう1つの制御機能である「反復制御」を解説します。

筆者紹介

小笠原宏幸(おがさわら ひろゆき)

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


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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