主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX
12c (12.2.0.1)
E70112-04
目次へ移動
目次

前
次

6.31 GET_RECORD_BUFFER

適用対象

ExtractおよびReplicat

説明

GET_RECORD_BUFFERファンクションでは、カスタム列変換に関する情報を取得します。MAPまたはTABLEパラメータのCOLMAPオプションでは十分に対応できないときは、ユーザー・イグジットを使用して異なるソースおよびターゲット・レコード間でデータをマッピングできます。たとえば、ユーザー・イグジットを使用してEnscribeデータベースの固有の日付フィールド(たとえばYYDDD)をターゲット・レコードで標準のSQL日付に変換し、他の列はCOLMAPオプションを使用してExtractプロセスでマップできます。

SET_RECORD_BUFFERファンクション(SET_RECORD_BUFFERを参照してください)では、GET_RECORD_BUFFERで取得したデータを変更できます。ただし、これには内部Oracle GoldenGate正規フォーマットで書き込まれたデータ・レコードに対する理解が必要です。かわりの方法として、SET_COLUMN_VALUE_BY_INDEXファンクション(SET_COLUMN_VALUE_BY_INDEXを参照してください)またはSET_COLUMN_VALUE_BY_NAMEファンクション(STRNCMPを参照してください)を使用して、データ・レコードの列値を設定できます。

削除、挿入、および更新は、バッファに完全なレコード・イメージで保持されます。

圧縮SQL更新は、次のフォーマットを持ちます。

index length value [index length value ][...]

説明:

  • indexは、表の列のリストへの2バイトの索引(最初の列はゼロ)です。

  • lengthは、表の2バイトの長さです。

  • valueは、実際の列値で、適切な場合に次の2バイトのNULLインジケータの1つが含まれます。0は非NULLです。-1はNULLです。

SQLレコードの場合は、DECOMPRESS_RECORDファンクション(DECOMPRESS_RECORDを参照してください)を使用して操作のためにレコードを解凍した後、COMPRESS_RECORDファンクション(COMPRESS_RECORDを参照してください)を使用して、プロセスに予期されるとおりにもう一度圧縮できます。

圧縮Enscribe更新は、次のフォーマットを持ちます。

offset length value [offset length value ][...]

説明:

  • offsetは変更されたEnscribeレコードのデータ・フラグメントのオフセットです。

  • lengthはフラグメント長です。

  • valueはデータです。フラグメントはフィールド境界にまたがることがあるため、(圧縮が無効かまたはFETCHCOMPSが使用されている場合を除き)完全なフィールドが常に取得されるわけではありません。

構文

#include "usrdecs.h"
short result_code;
record_def record;
ERCALLBACK (GET_RECORD_BUFFER, &record, &result_code);

バッファ

typedef struct
{
char *table_name;
char *buffer;
long length;
char before_after_ind;
short io_type;
short record_type;
short transaction_ind;
int64_t timestamp;
exit_ts_str io_datetime;
short mapped;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION   */
char requesting_before_after_ind;
} record_def;

入力

source_or_target

ソースまたはターゲット・データ・レコードのどちらのレコード・バッファを返すかを示す次の一方。

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
requesting_before_after_ind

オプションです。io_typeがUPDATE_COMP_PK_SQL_VAL(主キー更新)のレコードのレコード・バッファをリクエストしているときに設定します。次のいずれかを使用して、主キー更新のどの部分にアクセスするかを指定します。デフォルトはAFTER_IMAGE_VALです。

BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL

出力

buffer

レコード・バッファへのポインタ。通常bufferは、exit_rec_buf_defタイプのバッファへのポインタです。exit_rec_buf_defバッファには、ExtractまたはReplicatによってまもなく処理される実際のレコードが含まれます。このバッファは、コール・タイプがEXIT_CALL_DISCARD_RECORDのときに指定されます。イグジット・ルーチンは、たとえばカスタム・マッピング・ファンクションを実行するために、このバッファの内容を変えることがあります。

レコード・バッファの内容は、ユーザー・イグジットのキャラクタ・セットとの変換が行われません。これはそのままで渡されます。

length

返されるレコード・バッファの長さ。

io_type

次のいずれかが返されます。

  • DDLタイプ:

    SQL_DDL_VAL
    
  • DMLタイプ:

    DELETE_VAL
    INSERT_VAL
    UPDATE_VAL
    
  • 圧縮Enscribe更新:

    UPDATE_COMP_ENSCRIBE_VAL
    
  • 圧縮SQL更新:

    UPDATE_COMP_SQL_VAL
    UPDATE_COMP_PK_SQL_VAL
    
  • その他:

    TRUNCATE_TABLE_VAL
    
mapped

これがマップされたレコード・バッファかどうかを示すフラグ(0または1)。

before_after_ind

レコードがビフォア・イメージかアフター・イメージかを示す次の一方。

BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL

返される値

EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK