Cに対応するOCI外部プロシージャ関数を次に示します。
表20-2 外部プロシージャ関数
関数 | 用途 |
---|---|
|
外部プロシージャの継続時間にメモリーを割り当てます。 |
|
PL/SQLに例外を呼び出します。 |
|
例外をメッセージ付きで呼び出します。 |
|
OCI環境ハンドル、サービス・コンテキスト・ハンドルおよびエラー・ハンドルを取得します。 |
用途
外部プロシージャの継続時間にNバイトのメモリーを割り当てます。
構文
void * OCIExtProcAllocCallMemory ( OCIExtProcContext *with_context, size_t amount );
パラメータ
C外部プロシージャに渡されるwith_context
ポインタです。
割り当てるバイト数です。
コメント
このコールは、外部プロシージャのコール継続時間にamount
バイトのメモリーを割り当てます。
このコールで割り当てられたメモリーは、外部プロシージャから戻るとすぐにPL/SQLによって解放されます。アプリケーションでは、OCIExtProcAllocCallMemory()
で割り当てたメモリーにfree()
関数を使用しないでください。この関数を使用して、関数の戻り値用のメモリーを割り当ててください。
0(ゼロ)の戻り値はエラーとして扱われます。
戻り値
割り当てたメモリーを指し示す未定義の型(不透明な)ポインタを戻します。
例
text *ptr = (text *)OCIExtProcAllocCallMemory(wctx, 1024)
関連関数
OCIErrorGet()およびOCIMemoryAlloc()
用途
PL/SQLに例外を呼び出します。
構文
size_t OCIExtProcRaiseExcp ( OCIExtProcContext *with_context, int errnum );
パラメータ
C外部プロシージャに渡されるwith_context
ポインタです。
PL/SQLにシグナルを送るOracleエラー番号です。errnum
は、1〜32767の正数にしてください。
コメント
この関数をコールすると、例外がPL/SQLに通知されます。この関数が問題なく戻されると、外部プロシージャは終了処理を開始し、PL/SQLに戻ります。いったん例外がPL/SQLに通知されると、IN/OUT引数とOUT引数(ある場合)は処理されません。
戻り値
この関数は、コールが成功した場合は、OCIEXTPROC_SUCCESS
を戻します。 コールが失敗した場合は、OCIEXTPROC_ERROR
を戻します。
関連関数
用途
例外をメッセージ付きで呼び出します。
構文
size_t OCIExtProcRaiseExcpWithMsg ( OCIExtProcContext *with_context, int errnum, char *errmsg, size_t msglen );
パラメータ
C外部プロシージャに渡されるwith_context
ポインタです。
PL/SQLへシグナルを送るOracleエラー番号です。errnum
は、1〜32767の正数にしてください。
errnum
に対応付けられたエラー・メッセージです。
エラー・メッセージの長さです。errmsg
がNULL
で終了する文字列の場合は、0(ゼロ)が渡されます。
コメント
PL/SQLに例外が呼び出されます。さらに、後続のエラー・メッセージ文字列を標準のOracleエラー・メッセージ内で代入します。
戻り値
この関数は、コールが成功した場合は、OCIEXTPROC_SUCCESS
を戻します。 コールが失敗した場合は、OCIEXTPROC_ERROR
を戻します。
関連関数
用途
OCI環境、サービス・コンテキストおよびエラー・ハンドルを取得します。
構文
sword OCIExtProcGetEnv ( OCIExtProcContext *with_context, OCIEnv **envh, OCISvcCtx **svch, OCIError **errh );
パラメータ
C外部プロシージャに渡されるwith_context
ポインタです。「With_Context型」を参照してください。
OCI環境ハンドルを格納する変数のポインタです。
OCIサービス・ハンドルを格納する変数のポインタです。
OCIエラー・ハンドルを格納する変数のポインタです。
コメント
この関数の主な目的は、OCIコールバックで同じトランザクションのデータベースを使用可能にすることです。この関数で取得するOCIハンドルは、データベースに対するOCIコールバックで使用する必要があります。これらのハンドルを標準のOCIコールを介して取得した場合、これらのハンドルはデータベースへの新規接続を使用するので、同一トランザクション内のコールバックには使用できません。1つの外部プロシージャで使用できるのは、コールバックと新規接続のどちらか一方で、両方は使用できません。
コールの例:
OCIEnv *envh; OCISvcCtx *svch; OCIError *errh; ... OCIExtProcGetEnv(ctx,&envh,&svch,&errh);
戻り値
この関数は、コールが成功した場合は、OCI_SUCCESS
を戻します。コールが失敗した場合は、OCI_ERROR
を戻します。
関連関数