PL/SQLとは何か プログラムの特徴と基本構造を理解する:超入門「PL/SQL」(1)(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;
このプログラムでは、「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)。
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での解析、実行処理が発生します。
一方のストアド・サブプログラムは、プログラムに名前を付け、解析された(構文などのチェック済みの)状態でOracle Databaseに格納したプログラムのことです。ストアド・サブプログラムは、そのプログラム名を指定するだけで実行できます(図3)。
図3では「calc_sal」という名前のPL/SQLプログラムを作成し、Oracle Databaseに送信後、解析された状態で格納してあります。クライアント側から「calc_sal」プログラムを指定すると、このプログラムが呼び出されて実行されます。
ポイントは、実行のたびにプログラムをOracle Databaseに送信する必要がないことと、解析に掛かるOracle Database側のオーバーヘッドを削減できることです。
その他に、ストアド・サブプログラムはデータベースに格納済みであることから、複数のユーザーで同じプログラムを共有できることもメリットです。
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対応版】