PL/SQLの利点
PL/SQLには、その他のプログラミング言語と比較したときに、いくつかのメリットがあります。
SQLとの緊密な統合
PL/SQLは、SQLと緊密に統合された、最も広く使用されているデータベース操作言語です。
たとえば:
-
PL/SQLでは、SQLのデータ操作、カーソル制御およびトランザクション制御のすべての文、SQLのすべてのファンクション、演算子および擬似列を使用できます。
-
PL/SQLでは、SQLデータ型を完全にサポートしています。
PL/SQLとSQLのデータ型間で変換を行う必要はありません。たとえば、PL/SQLプログラムがSQL型
VARCHAR2
の列から値を取得する場合は、その値をVARCHAR2
型のPL/SQL変数に格納できます。明示的にデータ型を指定することなく、PL/SQLデータ項目を、データベース表の列や行のデータ型にできます(「%TYPE属性の使用」および「%ROWTYPE属性の使用」を参照)。
-
PL/SQLでは、SQL問合せを実行し、結果セットの行を一度に1行ずつ処理することができます(「問合せ結果セットの一度に1行ずつの処理」を参照)。
-
PL/SQLファンクションは、SQL
SELECT
文のWITH
句で宣言および定義できます(『Oracle Database SQL言語リファレンス』を参照)。 -
可能な場合、SQL文から呼び出されるPL/SQLファンクションは、意味的に同等なSQL式に自動SQLトランスパイラによって自動変換されます(SQL_MACRO句およびOracle Database SQLチューニング・ガイドを参照)。
PL/SQLは静的SQLおよび動的SQLの両方をサポートしています。静的SQLとは、コンパイル時にテキスト全体がわかるSQLのことです。動的SQLとは、実行時までテキスト全体が不明なSQLのことです。動的SQLを使用すると、アプリケーションをより柔軟で多目的に使用できます。詳細は、「PL/SQLの静的SQL」および「PL/SQLの動的SQL」を参照してください。
高いパフォーマンス
PL/SQLでは、複数文のブロックをデータベースに送信して、アプリケーションとデータベースの間の通信量を大幅に削減できます。
バインド変数
PL/SQLコードにSQLのINSERT
、UPDATE
、DELETE
、MERGE
またはSELECT
文を直接埋め込むと、PL/SQLコンパイラは、WHERE
句およびVALUES
句内の変数をバインド変数に変換します(詳細は、「静的SQL文における名前解決」を参照)。これらのSQL文は、同じコードが実行されるたびにOracle Databaseによって再利用されるため、パフォーマンスが向上します。
バインド変数は、動的SQLの使用時にPL/SQLによって自動的には作成されませんが、明示的に指定することによって動的SQLとともに使用できます(詳細は、「EXECUTE IMMEDIATE文」を参照)。
サブプログラム
PL/SQLサブプログラムは実行可能な形式で格納され、繰り返し起動することができます。ストアド・サブプログラムはデータベース・サーバー内で実行されるため、ネットワークを介した1回の起動で大規模なジョブを開始できます。この作業の分割によってネットワークの通信量が軽減され、応答時間が短縮されます。ストアド・サブプログラムはキャッシュされ、ユーザー間で共有されるため、メモリー要件と起動のオーバーヘッドが低減します。サブプログラムの詳細は、「サブプログラム」を参照してください。
オプティマイザ
PL/SQLコンパイラには、コードのパフォーマンスが向上するように再調整する機能を持つオプティマイザがあります。オプティマイザの詳細は、「PL/SQLオプティマイザ」を参照してください。
高い生産性
PL/SQLは、設計およびデバッグ時間を削減するための多くの機能を備えていて、どの環境でも同様です。
PL/SQLでは、データを操作するコードをコンパクトにすることができます。Perlのようなスクリプト言語が、ファイルのデータを読み込み、変換して、書き込むのと同じように、PL/SQLは、データベースのデータを問い合せ、変換して、更新することができます。
あるOracleツールでPL/SQLの使用方法を学習すれば、その知識は他のOracleツールにも活用できます。PL/SQLの特長の概要は、「PL/SQLの主な特長」を参照してください。
移植性
PL/SQLは、移植性のあるOracle開発用の標準言語です。
PL/SQLアプリケーションは、Oracle Databaseが動作する任意のオペレーティング・システムおよびプラットフォームで実行できます。
スケーラビリティ
PL/SQLストアド・サブプログラムは、データベース・サーバー上のアプリケーション処理を集中化することでスケーラビリティを高めます。
共有サーバーの共有メモリー機能を使用すると、単一ノード上の何千もの同時ユーザーをOracle Databaseでサポートできるようになります。サブプログラムの詳細は、「サブプログラム」を参照してください
Oracle Connection Managerでネットワーク接続を多重化して、さらにスケーラビリティを高めることもできます。Oracle Connection Managerの詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。
管理性
PL/SQLストアド・サブプログラムでは、クライアント・システムごとにサブプログラムのコピーを1つずつ保持するのではなく、データベース・サーバー上にコピーを1つのみ保持することができるため、管理性が向上します。
サブプログラムは任意の数のアプリケーションで使用することができ、呼出し元のアプリケーションに影響を与えることなく、サブプログラムを変更できます。サブプログラムの詳細は、「サブプログラム」を参照してください。
オブジェクト指向プログラミングのサポート
PL/SQLでは、オブジェクト指向の設計に使用可能なオブジェクト型を定義できます。
PL/SQLは、「抽象データ型」を使用したオブジェクト指向のプログラミングをサポートします。