連載
» 2017年03月14日 05時00分 UPDATE

超入門「PL/SQL」(1):PL/SQLとは何か プログラムの特徴と基本構造を理解する (1/2)

本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。初回は「PL/SQLの特徴とプログラムの基本構造」を解説します。

[小笠原宏幸,株式会社アシスト]

連載バックナンバー

 本連載は、Oracle Database向けにデータベース言語 SQL(Structured Query Language)を拡張したプログラミング言語である「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。SQLは知っているけれど、OracleでのPL/SQLは初めてという人向けに、機能の概要と具体的な書き方を解説していきます。

 初回である今回は、まず「PL/SQLとは何か」の基礎を説明します。

PL/SQLとは何か

 PL/SQLは米オラクルが開発した、「SQL(Structured Query Language:非手続き型言語)」を“手続き型”言語として拡張したプログラミング言語です。Oracle Databaseにおいて、さまざまな手続き処理を行うために用います。

 PL/SQLでは例えば、「表から取り出したデータを基に、レコードを更新するかどうかを判断する」「あるSQLを、指定した回数で繰り返し実行する」など、SQL単体では行えない一連の処理(手続き処理)を実行できます。

 簡単なPL/SQLプログラムの例を見てみましょう。

BEGIN
  FOR i IN 1..10 LOOP  /* ループ処理の開始地点。「END LOOP」までの処理を10回繰り返す */
    INSERT INTO test_tab VALUES(1);  /* test_tab表に「1」を挿入 */
  END LOOP;  /* ループ処理の開始地点に戻る */
END;
PL/SQLプログラムの例

 このプログラムでは、「INSERT INTO test_tab VALUES(1);」というSQLを、PL/SQLのループ処理によって10回繰り返し実行する、というものです。このようにSQL単体では難しい複雑な処理を、PL/SQLではシンプルに実現できます。

PL/SQLの特徴

 Oracle Databaseを使用するシステム開発では、プログラミング言語としてPL/SQLを使うと、その特徴によってさまざまなメリットを享受できます。例えば、以下のメリットがあります。

  • パフォーマンスに優れている
  • SQLとの親和性が高い
  • 移植性に優れている
  • プログラムをデータベースに格納して必要なときに呼び出せる

パフォーマンスに優れている

 Oracle Databaseを使用している環境でPL/SQLを使うと、PL/SQLの手続き処理とSQL処理をOracle Database上で一緒に行えます。そのため、他のプログラミング言語に比べて、プロセス間通信のオーバーヘッドやネットワークトラフィックを削減できます(図1)。

photo 図1 PL/SQLと別のプログラミング言語の比較

 PL/SQLでは、SQLを含めたプログラム全体をまとめてOracle Databaseに送信して処理します。一方のPL/SQL以外のプログラム(CやJavaなど)では、プログラム内に含まれるSQLが文単位でOracle Databaseに送信されます(図1では、3回発生しています)。このように、最終的に得られる結果は同じかもしれませんが、効率に差があることが分かると思います。つまり、PL/SQLを使用することでパフォーマンスの向上が期待できるということです。

SQLとの親和性が高い

 PL/SQLはSQLを拡張したプログラミング言語ですので、当然、SQLとの親和性が確保されています。PL/SQLプログラム内では、SQLの全ての文や関数などを使用できます。また、全てのSQLデータ型もサポートされているために、SQLとPL/SQL間でデータ型の変換作業も必要ありません。

 例えば、SQLでNUMBER型の列から値を取り出し、NUMBER型で定義したPL/SQL変数(プログラム内で値を一時的に保存しておく場所のこと)にそのまま代入できます。

移植性に優れている

 また、PL/SQLで記述されたアプリケーションは、特定のハードウェアやプラットフォームに依存しません。Oracle Databaseが動作する全ての環境でプログラムの手直しをすることなく実行できます。

プログラムをデータベースに格納して、必要なときに呼び出せる

 PL/SQLプログラムは、「無名のPL/SQLプログラム」と「ストアド・サブプログラム」に分類されます。

 無名のPL/SQLプログラムとは、クライアント側からOracle Databaseにプログラムを送信し、実行するプログラムのことです(図2)。こちらは手軽な半面、都度プログラムの送信やOracle Databaseでの解析、実行処理が発生します。

photo 図2 「無名のPL/SQLプログラム」の動き

 一方のストアド・サブプログラムは、プログラムに名前を付け、解析された(構文などのチェック済みの)状態でOracle Databaseに格納したプログラムのことです。ストアド・サブプログラムは、そのプログラム名を指定するだけで実行できます(図3)。

photo 図3 「ストアド・サブプログラム」の動き

 図3では「calc_sal」という名前のPL/SQLプログラムを作成し、Oracle Databaseに送信後、解析された状態で格納してあります。クライアント側から「calc_sal」プログラムを指定すると、このプログラムが呼び出されて実行されます。

 ポイントは、実行のたびにプログラムをOracle Databaseに送信する必要がないことと、解析に掛かるOracle Database側のオーバーヘッドを削減できることです。

 その他に、ストアド・サブプログラムはデータベースに格納済みであることから、複数のユーザーで同じプログラムを共有できることもメリットです。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

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

メールマガジン登録

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