3.6 ERCALLBACKの使用
ERCALLBACK
はOracle GoldenGateの基本的なユーザー・イグジット・ファンクションです。レコード・コンテキストをユーザー・イグジットに取得するために使用されます。これは、その中に複数の個別のファンクションを含むパッケージに似ています。これらのファンクションを呼び出すと、戻り値を取得できます。たとえば、GET_BEFORE_AFTER_IND
またはGET_COLUMN_VALUE_FROM_NAME
などのファンクションを呼び出すことができます。これらのファンクションはfunction_code
と呼ばれます。
構文
ERCALLBACK (function_code, buffer, result_code );
-
function_code
-
コールバック・ルーチンによって実行されるファンクション。ユーザー・コールバック・ルーチンは、コールバック・ルーチンに渡されるファンクション・コードに基づいて異なる動作をします。一部のファンクションは、ExtractおよびReplicat両方が使用できますが、各プロセスでのファンクションの有効性は、コールバック・ルーチン中にそのファンクションに対して設定される入力パラメータに依存します。使用可能なファンクション・コードの詳細は、ファンクション・コードを参照してください。
-
buffer
-
指定するファンクション・コードに関連付けられている事前定義済構造体を含むバッファへのvoidポインタ。
-
result_code
-
コールバック・ルーチンによって実行されるファンクションのステータス。コールバック・ルーチンによって返される結果コードは、コールバック・ファンクションが成功したかどうかを示します。結果コードは、表3-4の値の1つになります。
表3-4 結果コード
コード | 説明 |
---|---|
|
列データを取得または設定中に無効なデータを検出しました。 |
|
列 |
|
列の数値タイプに、無効な数値が含まれています。 |
|
圧縮更新レコードで列が見つかりませんでした(変更された値のみを記録するデータベースによる更新)。 |
|
指定された環境値がレコードに見つかりませんでした。 |
|
表または列名が割り当てられたバッファに収まらなかったため、メタデータを取得できませんでした。 |
|
レコードをフェッチできませんでした。エラー・メッセージを表示して理由を確認してください。 |
|
DDLレコードの処理中に内部エラーが発生しました。レコードが不完全の可能性があります。 |
|
無効なコールバック・ファンクション・コードがコールバック・ルーチンに渡されました。 |
|
ファンクション・コールで、存在しない列が参照されました。 |
|
ルーチンは、その目的ではOracle GoldenGateにサポートされていないデータ型を操作しようとしています。 |
|
コールバック・ファンクションが不適切なときにコールされました。 |
|
無効なパラメータがコールバック・ファンクションに渡されました。 |
|
ソース・データベース・インスタンスが見つかりませんでした。 |
|
ターゲット・データベース・インスタンスが見つかりませんでした。 |
|
このファンクションは、このプロセスに対してサポートされていません。 |
|
コールバック・ファンクションは成功しました。 |
|
文字セット変換ルーチンに |
|
無効な表名が指定されました。 |
|
指定されたトークンがレコードに見つかりませんでした。 |
ERCALLBACK
を使用して多数のファンクション・コールを実行できます。たとえば、表の名前を取得する場合は、次のコマンドを使用できます。
ERCALLBACK (GET_TABLE_NAME, &var, &result_code)
c
コード内で使用して、セクションFunction Codesで指定されるファンクションのコールを実行します。異なるfunction_code
コールの組合せにより、ERCALLBACK
を使用して次のように様々なタスクを実行できます。
- DML文の再作成
- 変換の実行
- レコードからの特定の列の取得
- レポート・ファイルへの情報の書込み
たとえば、ハートビート表のラグが特定のしきい値を超えるたびにメッセージをレポート・ファイルに書き込む必要がある場合は、CUSEREXIT
ファンクションを使用できます。CUSEREXIT
ファンクションでERCALLBACK
に多数のコールを行うと、ラグの列データを取得し、計算および比較を実行します。ラグが指定したしきい値を超えた場合、レポート・ファイルにメッセージが書き込まれます。
親トピック: ユーザー・イグジット・ファンクション