この章では、.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ストアド・プロシージャをデバッグします。