この章では、C/C++およびJavaを使用するプログラマが使用可能なカートリッジ・サービスについて説明します。
この章の内容は、次のとおりです。
関連項目 Cを使用したカートリッジ・サービスの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。 |
外部プロシージャからコールされたサービス・ルーチンは、例外の発生、メモリーの割当ておよびサーバーへのコールバックに使用するOCIハンドルの取得を行うことができます。ファンクションを使用するには、外部プロシージャにコンテキスト構造を渡せるように、WITH
CONTEXT
句を指定する必要があります。コンテキスト構造は、ヘッダー・ファイルociextp.h
内で次のように宣言されます。
typedef struct OCIExtProcContext OCIExtProcContext;
この項では、サービス・ルーチンでコンテキスト情報を使用する方法について説明します。詳細と使用例は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』の外部プロシージャに関する章を参照してください。
このサービス・ルーチンは、外部プロシージャ・コールの期間に対してnバイトのメモリーを割り当てます。ファンクションにより割り当てられたメモリーは、制御がPL/SQLに戻ると解放されます。
注意: メモリーの割当てや解放には他のファンクションを使用しないでください。 |
このファンクションのCのプロトタイプは次のとおりです。
void *OCIExtProcAllocCallMemory( OCIExtProcContext *with_context, size_t amount);
パラメータwith_contextおよびamountは、それぞれ割り当てるコンテキスト・ポインタとバイト数です。ファンクションは、割当済メモリーへの型指定のないポインタを戻します。戻り値0(ゼロ)は失敗を示します。
このサービス・ルーチンは事前定義済の例外を発生させます。例外は、1
〜32767
の範囲内の有効なOracleエラー番号で表示されます。必要なクリーン・アップの実行直後に、外部プロシージャが値を戻す必要があります。(値は、OUT
またはIN
OUT
パラメータには割り当てられません。)このファンクションのCのプロトタイプは次のとおりです。
int OCIExtProcRaiseExcp( OCIExtProcContext *with_context, size_t error_number);
パラメータwith_context、およびerror_numberは、コンテキスト・ポインタ、Oracleエラー番号およびエラー・メッセージ・テキストです。戻り値OCIEXTPROC_SUCCESS
およびOCIEXTPROC_ERROR
は、成功または失敗を示します。
このサービス・ルーチンは、ユーザー定義例外を発生させてユーザー定義のエラー・メッセージを戻します。このファンクションのCのプロトタイプは次のとおりです。
int OCIExtProcRaiseExcpWithMsg( OCIExtProcContext *with_context, size_t error_number, text *error_message, size_t len);
パラメータwith_context
、error_number
およびerror_message
は、コンテキスト・ポインタ、Oracleエラー番号およびエラー・メッセージ・テキストです。パラメータlenには、エラー・メッセージの長さが格納されます。メッセージがNULL文字で終了する文字列の場合、lenは0(ゼロ)です。戻り値OCIEXTPROC_SUCCESS
およびOCIEXTPROC_ERROR
は、成功または失敗を示します。
このサービス・ルーチンは、外部プロシージャ・コール中にデータベースへのOCIコールバックを有効化します。このファンクションで取得されるOCIハンドルは、コールバックにのみ使用してください。そのOCIハンドルを標準OCIコールに使用すると、データベースへの新規接続が確立され、同じトランザクションではコールバックに使用できません。つまり、外部プロシージャ・コール時には、OCIハンドルをコールバックまたは新規接続に使用できますが、両方に使用することはできません。
このファンクションのCのプロトタイプは次のとおりです。
sword OCIExtProcGetEnv( OCIExtProcContext *with_context, OCIEnv **envh, OCISvcCtx **svch, OCIError **errh);
パラメータwith_contextはコンテキスト・ポインタで、パラメータenvh、svchおよびerrhはそれぞれOCI環境ハンドル、サービス・ハンドルおよびエラー・ハンドルです。戻り値OCIEXTPROC_SUCCESS
およびOCIEXTPROC_ERROR
は、成功または失敗を示します。
「コールバックの実行」はOCIExtProcGetEnv
をコールバックに使用する方法を示しています。作業例は、PL/SQLデモ・ディレクトリにあるスクリプトextproc.sqlを参照してください。(このディレクトリの位置は、Oracleインストレーション・ガイドまたはユーザーズ・ガイドを参照してください。)このスクリプトは、外部プロシージャ・コールのデモを示しています。添付ファイルextproc.cには、外部プロシージャのCソース・コードが含まれています。デモを実行するには、extproc
.sql
内の指示に従ってください。CREATE
LIBRARY
権限を持つアカウントを使用する必要があります。
この章で説明するJavaクラスを使用するには、ODCI.jar
およびCartridgeServices.jar
ファイルをSYS
スキーマにインストールする必要があります。
Javaオプションをインストール済の場合は、ODCI.jar
およびCartridgeServices.jar
ファイルをインストールする必要があります。Javaオプションをインストールしていない場合、このタスクを実行する必要はありません。
ODCI.jarおよびCartridgeServices.jarファイルをインストールする方法
SQL*Plusプロンプトを起動します。
C:\sqlplus
起動したら、system
アカウントを使用してログインします。
Enter user-name: system
Enter password: password
サーバー側のloadjavaコマンドを使用してクラスをインストールし、SYSTEM
スキーマにシノニムを作成します。
SQL> call dbms_java.loadjava('-resolve -synonym -grant public -verbose vobs/jilip/Cartridge Services.jar'); SQL> call dbms_java.loadjava('-resolve -synonym -grant public -verbose vobs/jlib/ODCI.jar');
jar
ファイルのインストールの詳細は、『Oracle Databaseアップグレード・ガイド』のデータベースの移行または更新後に行う作業に関する章を参照してください。
Javaカートリッジ・サービスは、コンテキストのメンテナンスに使用されます。これはOCIコンテキスト管理サービスに似ています。サーバーおよびカートリッジ・コード間でコンテキストを切り替えるには、このクラスを使用する必要があります。
ContextManagerはObjectを拡張するOracleクラスのコンストラクタです。
クラス・インタフェース
public static Hashtable ctx extends Object
変数
ctx public static Hashtable ctx
コンストラクタ
ContextManager public ContextManager()
メソッド
次のメソッドを使用できます。
setContext (static method in class oracle) getContext (static method in class oracle) clearContext (static method in class oracle)