5.2 ストアド・プロシージャの利点
5.2.1 パフォーマンス
ストアド・プロシージャは、一度コンパイルされて実行可能な形式で格納されています。そのため、プロシージャ・コールが迅速かつ効率的に処理されます。実行可能コードは自動的にキャッシュされ、ユーザー間で共有されます。この結果、メモリー要件や起動時のオーバーヘッドが低減します。
SQL文をグループ化することによって、ストアド・プロシージャではそれらを1回のコールで処理できます。この結果、ネットワークの通信量が減少し、ラウンドトリップの応答時間が短縮されます。
また、ストアド・プロシージャを使用すると、サーバーのコンピューティング資源を利用できます。たとえば、計算専用プロシージャをクライアントからサーバーに移動すると、サーバーでより高速に実行できます。ストアド・ファンクションにより、サーバー内でアプリケーション・ロジックが実行されるため、パフォーマンスが向上します。
5.2.2 生産性と使いやすさ
共通のストアド・プロシージャのセットの周囲にアプリケーションを設計することによって、冗長なコーディングを回避し、生産性を向上させることができます。さらに、ストアド・プロシージャを使用するとデータベースの機能を拡張できます。
ストアド・プロシージャの作成には、希望に応じてJava統合開発環境(IDE)を使用できます。これらのストアド・プロシージャは、Java Database Connectivity(JDBC)などの標準Javaインタフェース、またはSQLJ、Oracle Call Interface(OCI)、Pro*C/C++およびJDeveloperなどのプログラム・インタフェースや開発ツールによりコールできます。
このようなストアド・プロシージャへの広範囲にわたるアクセス方法によって、アプリケーション間でビジネス・ロジックを共有できます。たとえば、ビジネス・ルールを実装するストアド・プロシージャは、様々なクライアント・サイド・アプリケーションからコールできるため、そのすべてのアプリケーションがビジネス・ルールを共有できます。また、サーバーのJava機能を利用する一方で、任意のプログラム・インタフェース用のアプリケーションを引き続き作成できます。
5.2.3 スケーラビリティ
データベースのJavaは、Oracleデータベースのスケーラブルなセッション・モデルを継承します。ストアド・プロシージャでは、サーバー上のアプリケーション処理を独立することによってスケーラビリティが向上します。また、ストアド・プロシージャの依存性自動追跡機能は、スケーラブルなアプリケーションの開発に役立ちます。
5.2.4 メンテナンス性
妥当性チェックが実施されているストアド・プロシージャは、どのアプリケーションでも使用できます。ストアド・プロシージャの定義が変更された場合、影響を受けるのはそのプロシージャのみで、プロシージャをコールするアプリケーションには影響しません。このため、メンテナンスおよび拡張が容易になります。また、1つのプロシージャをサーバー上でメンテナンスする方が、様々なクライアント・コンピュータ上のコピーをメンテナンスするより簡単です。
5.2.5 相互運用性
Oracle Databaseで、JavaはJava言語仕様(JLS)に完全に準拠し、汎用のオブジェクト指向プログラミング言語の利点をすべて提供します。また、PL/SQLと同様に、JavaではOracleデータへのフル・アクセスが提供されています。そのため、PL/SQLで作成されるプロシージャはすべてJavaで作成できます。
Javaストアド・プロシージャはPL/SQLストアド・プロシージャによって補完されます。通常、プロシージャ型の拡張機能を必要とするSQLプログラマはPL/SQLを使用することが多く、Oracleデータに簡単にアクセスする必要があるJavaプログラマはJavaをよく使用します。
Oracle Databaseを使用すると、JavaとPL/SQL間の高度な相互運用性が実現します。Javaアプリケーションは埋込み型のJDBCドライバを使用してPL/SQLストアド・プロシージャをコールできます。一方、PL/SQLアプリケーションはJavaストアド・プロシージャを直接コールできます。
5.2.6 レプリケーション
Oracle Advanced Replicationを使用すると、ストアド・プロシージャをOracle Databaseのあるインスタンスから別のインスタンスにレプリケートできます。この機能により、ストアド・プロシージャを使用して基本的なビジネス・ルール・セットを実装できます。ストアド・プロシージャは、一度作成すると、レプリケートして、企業内の作業グループや支店に配布できます。この方法で、個々のサーバーではなく中央のサーバーでポリシーを改訂できます。
5.2.7 セキュリティ
セキュリティの範囲は広く、次のものが含まれます。
-
接続に関するネットワーク・セキュリティ
-
オペレーティング・システム・リソースまたはJVM定義クラスやユーザー定義クラスのアクセス制御および実行制御
-
外部ソースからインポートされたJARファイルのバイトコード検証。
Oracle Databaseでは、すべてのクラスがセキュアなデータベースにロードされるため、アントラステッドな状態になります。ユーザーがクラスおよびオペレーティング・システム・リソースにアクセスするには、適切なパーミッションが必要です。同様に、すべてのストアド・プロシージャは他のユーザーから保護されています。ストアド・プロシージャにアクセスする必要があるユーザーに、EXECUTE
データベース権限を付与できます。
また、ユーザーに対しては、定義者権限で実行されるストアド・プロシージャのみからOracleデータの操作を許可することによって、Oracleデータへのアクセスを制限できます。たとえば、データベースの表を更新するプロシージャへのアクセスは許可しても、その表自体へのアクセスは拒否することもできます。