ヘッダーをスキップ
Oracle Databaseデータ・カートリッジ開発者ガイド
11gリリース1(11.1)
E05688-02
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

18 C、C++およびJavaを使用したカートリッジ・サービス

この章では、C/C++およびJavaを使用するプログラマが使用可能なカートリッジ・サービスについて説明します。

この章の内容は、次のとおりです。


関連項目

Cを使用したカートリッジ・サービスの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

外部プロシージャ用のOCIアクセス・ファンクション

外部プロシージャからコールされたサービス・ルーチンは、例外の発生、メモリーの割当ておよびサーバーへのコールバックに使用するOCIハンドルの取得を行うことができます。ファンクションを使用するには、外部プロシージャにコンテキスト構造を渡せるように、WITH CONTEXT句を指定する必要があります。コンテキスト構造は、ヘッダー・ファイルociextp.h内で次のように宣言されます。

typedef struct OCIExtProcContext OCIExtProcContext;

この項では、サービス・ルーチンでコンテキスト情報を使用する方法について説明します。詳細と使用例は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』の外部プロシージャに関する章を参照してください。

OCIExtProcAllocCallMemory

このサービス・ルーチンは、外部プロシージャ・コールの期間に対してnバイトのメモリーを割り当てます。ファンクションにより割り当てられたメモリーは、制御がPL/SQLに戻ると解放されます。


注意:

メモリーの割当てや解放には他のファンクションを使用しないでください。

このファンクションのCのプロトタイプは次のとおりです。

void *OCIExtProcAllocCallMemory(
   OCIExtProcContext *with_context,
   size_t amount);

パラメータwith_contextおよびamountは、それぞれ割り当てるコンテキスト・ポインタとバイト数です。ファンクションは、割当済メモリーへの型指定のないポインタを戻します。戻り値0(ゼロ)は失敗を示します。

OCIExtProcRaiseExcp

このサービス・ルーチンは事前定義済の例外を発生させます。例外は、132767の範囲内の有効なOracleエラー番号で表示されます。必要なクリーン・アップの実行直後に、外部プロシージャが値を戻す必要があります。(値は、OUTまたはIN OUTパラメータには割り当てられません。)このファンクションのCのプロトタイプは次のとおりです。

int OCIExtProcRaiseExcp(
   OCIExtProcContext *with_context,
   size_t error_number);

パラメータwith_context、およびerror_numberは、コンテキスト・ポインタ、Oracleエラー番号およびエラー・メッセージ・テキストです。戻り値OCIEXTPROC_SUCCESSおよびOCIEXTPROC_ERRORは、成功または失敗を示します。

OCIExtProcRaiseExcpWithMsg

このサービス・ルーチンは、ユーザー定義例外を発生させてユーザー定義のエラー・メッセージを戻します。このファンクションのCのプロトタイプは次のとおりです。

int OCIExtProcRaiseExcpWithMsg(
   OCIExtProcContext *with_context,
   size_t error_number,
   text   *error_message,
   size_t  len);

パラメータwith_contexterror_numberおよびerror_messageは、コンテキスト・ポインタ、Oracleエラー番号およびエラー・メッセージ・テキストです。パラメータlenには、エラー・メッセージの長さが格納されます。メッセージがNULL文字で終了する文字列の場合、lenは0(ゼロ)です。戻り値OCIEXTPROC_SUCCESSおよびOCIEXTPROC_ERRORは、成功または失敗を示します。

OCIExtProcGetEnv

このサービス・ルーチンは、外部プロシージャ・コール中にデータベースへの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カートリッジ・サービス・ファイルのインストール

この章で説明するJavaクラスを使用するには、ODCI.jarおよびCartridgeServices.jarファイルをSYSスキーマにインストールする必要があります。

Javaオプションをインストール済の場合は、ODCI.jarおよびCartridgeServices.jarファイルをインストールする必要があります。Javaオプションをインストールしていない場合、このタスクを実行する必要はありません。

ODCI.jarおよびCartridgeServices.jarファイルをインストールする方法

  1. SQL*Plusプロンプトを起動します。

    C:\sqlplus
    
  2. 起動したら、systemアカウントを使用してログインします。

    Enter user-name: system
    Enter password: password
    
  3. サーバー側の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

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)

CountException()

Exceptionを拡張するコンストラクタ。

Class oracle.CartridgeServices.CountException

CountException(String)

Exceptionを拡張するコンストラクタ。

public CountException(String s)

InvalidKeyException()

Exceptionを拡張するコンストラクタ。

public InvalidKeyException(String s)

InvalidKeyException(String)

Exceptionを拡張するコンストラクタ。

public InvalidKeyException(String s)