この章では、.NETストアド・プロシージャまたはファンクションを開発してOracle Databaseにデプロイするために必要な手順について説明します。
この章は次のトピックで構成されています。
Microsoft Visual Studio .NETを使用して、適切な.NET言語でストアド・プロシージャまたはファンクションを記述します。.NETストアド・プロシージャまたはファンクションにOracle Data Provider for .NET(Oracle.DataAccess.Client
およびOracle.DataAccess.Types
)を使用して、データ・アクセスを提供します。ストアド・プロシージャまたはファンクションを、EXEではなくDLLとしてアセンブリに組み込みます。通常、この作業にはクラス・ライブラリ・プロジェクトを使用します。データ・アクセスを使用する.NETプロシージャまたはファンクションを設計および開発する際には、Oracle Data Provider for .NETの制限事項、特に接続およびトランザクション・セマンティクスに関する制限に注意してください。
Microsoft Visual Studio .NETからOracle Deployment Wizard for .NETを実行します。Oracle Deployment Wizard for .NETは、Oracle Developer Tools for Visual Studio .NETの一部としてインストールされます。このウィザードでは、SYSDBA
資格証明、デプロイするアセンブリの名前およびデプロイ先データベースを指定する必要があります。
デプロイするアセンブリのメソッド・リストがOracle Deployment Wizard for .NETに表示された時点で、デプロイするプロシージャまたはファンクションを選択します。
また、セキュリティ・レベルも選択します。
Oracle Database Extensions for .NETにより、指定のセキュリティ・レベルで.NETストアド・プロシージャまたはファンクションが実行されます。セキュリティ・レベルは、.NETストアド・プロシージャまたはファンクションに付与されたコード・アクセス許可を示します。デフォルトでは、.NETストアド・プロシージャまたはファンクションはSAFEセキュリティ・レベルで実行されます。
セキュリティ・レベルは次のとおりです。
Safe
Safeレベルの場合、.NETストアド・プロシージャまたはファンクションからデータベース・リソースへのアクセスのみが許可されます。ローカル・ファイルやネットワークなどの外部リソースへのアクセスは許可されません。
External
Externalレベルの場合、.NETストアド・プロシージャまたはファンクションは、ローカル・ファイルの読取りまたは書込みと、ソケットやインターネット・ノードなどのネットワーク・リソースへのアクセスが許可されます。
Unsafe
Unsafeレベルの場合、.NETストアド・プロシージャまたはファンクションは、管理されていないコードの実行を含め、制限なしの実行が許可されます。このレベルは、他のすべてのセキュリティ・レベルのスーパーセットです。
.NETストアド・プロシージャまたはファンクションのPL/SQLラッパーを作成するために、.NETデータ型とOracleデータ型の間の適切なマッピングを判別します。Oracle Deployment Wizard for .NETにはデフォルト・マッピングが用意されていますが、オーバーライドできます。
オーバーロードされる.NETストアド・プロシージャまたはファンクションの場合は、PL/SQLラッパーの個別名を指定する必要があります。
変換情報は、付録Aの表を参照してください。
プロシージャまたはファンクションをデータベースにデプロイします。ウィザードでは次のステップが実行されます。
SYSDBA
として接続します。
ユーザー・アセンブリをORACLE_BASE\ORACLE_HOME
\bin\CLR
ディレクトリまたはサブディレクトリにコピーします。
Oracleライブラリ・オブジェクトを作成し、このライブラリ・オブジェクトに対するEXECUTE権限をデータベース・ユーザーに付与します。
CREATE OR REPLACE LIBRARY CLRLIBRARY1_DLL AS '$ORACLE_HOME\ bin\clr\CLRLibrary1_dll; GRANT EXECUTE ON CLRLIBRARY1_DLL TO SCOTT;
ユーザーが定義したパラメータ型マッピングに従って、プロシージャまたはファンクションごとにユーザーのデータベース・スキーマにPL/SQLラッパーを作成します。
PL/SQLラッパーをコールして、.NETストアド・プロシージャまたはファンクションをテストします。
PL/SQLラッパーは、Oracle Developer Tools for Visual Studio .NETまたはSQL*Plusなどのツールを使用して容易に検索して実行できます。
.NETストアド・プロシージャまたはファンクションがコールされると、Oracleデータベース・リスナーは要求をマルチスレッドCLR外部プロシージャ・エージェントextproc.exe
にリダイレクトします。各.NETストアド・プロシージャまたはファンクションは、extproc.exe
プロセスのコンテキスト内で実行されます。
.NETストアド・プロシージャまたはファンクションを表す.NETアセンブリのデバッグ・バージョンとそのpdb
ファイル、依存DLLおよびそれぞれのpdb
ファイルが、ライブラリの作成時に指定したパスに基づいてORACLE_BASE\ORACLE_HOME
\bin\clr
ディレクトリまたはサブディレクトリの1つにコピーされることを確認してください。
デバッガをextproc.exe
プロセスに連結します。デバッガには.NETコードのデバッグ機能が必要であることに注意してください。デバッグにVisual Studio .NETを使用する場合は、「プロセスにアタッチ」ダイアログ・ボックスで「ネイティブ」オプションと「共通言語ランタイム」オプションを選択します。すでに同じextproc.exe
プロセスのコンテキスト内で実行済の.NETストアド・プロシージャがある場合は、「ネイティブ」オプションの選択を解除できます。
デバッガの連結後に、.NETストアド・プロシージャまたはファンクションのソース・コードを開き、必要なブレークポイントを必要な位置に設定します。
.NETストアド・プロシージャをデバッグします。