e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第2回 「世界で一番短いPL/SQLブロック」

2011.11.21

こんにちは。「PL/SQLを使ってみよう!」第2回目です。

前回は、PL/SQLの概要でした。PL/SQLは、なんらかのアプリケーションから、オラクルデータベースに対して送信可能なプログラム言語です。必ずブロックという形式をとる必要があります。

今回は具体的に操作をしてみます。
そのためには何かのアプリケーションが必要です。本メルマガでは、アプリケーションとして、SQL*Plusを使います。SQL*Plusはオラクルデータベースやクライアントの製品に含まれている一般的なツールです。
通常、アプリケーションからオラクルデータベースサーバにSQL文や、PL/SQLブロックを送信するときは何らかの中間的なソフトウェア(例 ODBC, OO4O, DBC,PRO*COBOLなど)が必要ですが、SQL*Plusにはそういったものは必要なく、コマンドラインから直接入力したSQL文やPL/SQLブロックをそのままオラクルデータベースサーバに送信できるので、検証や勉強にも最適です。

ではさっそく、PL/SQLブロックをSQL*Plusからデータベースサーバに送信しましょう。
これ以上短いPL/SQLブロックはありません。

SQL> connect scott/tiger@mydb
接続されました。
SQL> BEGIN
2 NULL;
3 END;
4 /

PL/SQLプロシージャが正常に完了しました。

まず、「BEGIN」と記述することで、SQL*Plusはデータベースに送信すべきブロックの始まりであると認識して、SQL*Plusのバッファに文字列を溜め始めます。2行目、3行目もバッファに溜まります。最後の4行目の「/」によりSQL*Plusはバッファに溜めた文字列をまとめてデータベースサーバに送信します。
一方データベースサーバー側では、送信されてきた文字列が、ブロックの形式で文法的に正しければそれを実行します。正しく実行できれば、そのことがSQL*Plusに 戻り、SQL*Plusは、「PL/SQLプロシージャが正常に完了しました。」のメッセージを画面に表示します。

アプリケーションからオラクルデータベースサーバに送信するブロックには名前をつけないので無名ブロックといいます。無名PL/SQLブロックは必ず、「BEGIN」または「DECLARE」で始まり、最後は「END;」で終ります。2行目の「NULL;」は、「なにもしない」という意味の実行文です。
言語によっては、実行文がなければ省略できるものがありますが、PL/SQL言語では実行文は省略できません。実行する内容がなくても、最低1文は実行文を書く必要が あります。

上記の例は「なにもしない」という無名PL/SQLブロックでした。
これ以上短いブロックはないでしょう。では、何もしないというのは一般的ではないので、最後に画面出力の例を紹介して今回は終了します。

SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('PL/SQLを使ってみよう!');
3 END;
4 /
PL/SQLを使ってみよう!   ←表示されたメッセージ

PL/SQLプロシージャが正常に完了しました。

ここの2行目の DBMS_OUTPUT.PUT_LINE(~)により、指定した値をSQL*Plusの画面上に表示できます。SQL*PlusなどのOracle製品のツール上でのみ意味のあるPL/SQLの実行文です。

なお、最初の「SET SERVEROUTPUT ON」ですが、このセッションでSQL*Plusの画面出力を可能とするものです。これはPL/SQLではなく、SQL*Plusのコマンドであり、 データベースサーバーに送信されるものではありません。したがって、無名ブロックの外で記述することに注意してください。
セッション単位の機能なので毎回実行する必要はなく、セッションで1回だけの実行で結構です。

それでは、次回は変数について解説します。
では、これにて。

先頭へ戻る