説明
DECOMPRESS_RECORDファンクションは、GET_RECORD_BUFFER (「GET_RECORD_BUFFER」を参照してください)またはSET_RECORD_BUFFERファンクション(「SET_RECORD_BUFFER」を参照してください)で更新レコード全体を取得または操作する必要があるものの、レコードが圧縮されている場合に使用します。DECOMPRESS_RECORDは、レコードを論理列レイアウトに配置することにより、圧縮レコードの処理とマップを容易にします。存在する列は、索引および長さインジケータ(「圧縮レコード形式」を参照してください)なしで所定の位置に配置されます。紛失した列は、ゼロとして表現されます。DECOMPRESS_RECORDを使用するときは、他の操作が発生する前に呼び出す必要があります。ユーザー・イグジットが処理を完了したら、Oracle GoldenGateプロセスに返す前に、COMPRESS_RECORDファンクション(「COMPRESS_RECORD」を参照してください)を使用してレコードを再度圧縮してください。
このファンクションは、UPDATE操作の処理にのみ有効です。削除、挿入、および更新は、バッファに完全なレコード・イメージで保持されます。
レコード・バッファの内容は、ユーザー・イグジットのキャラクタ・セットとの変換が行われません。これはそのままで渡されます。
構文
#include "usrdecs.h" short result_code; compressed_rec_def compressed_rec; ERCALLBACK (DECOMPRESS_RECORD, &compressed_rec, &result_code);
バッファ
typedef struct
{
char *compressed_rec;
long compressed_len;
char *decompressed_rec;
long decompressed_len;
short *columns_present;
short source_or_target;
char requesting_before_after_ind;
} compressed_rec_def;
入力
compressed_rec圧縮フォーマットのレコードへのポインタ。この値を取得するには、GET_RECORD_BUFFERファンクションを使用します(「GET_RECORD_BUFFER」を参照してください)。
compressed_len圧縮レコードの長さ。この値を取得するには、GET_RECORD_BUFFER (「GET_RECORD_BUFFER」を参照してください)またはGET_RECORD_LENGTH (「GET_RECORD_LENGTH」を参照してください)ファンクションを使用します。
source_or_targetソースまたはターゲットのどちらのレコードが解凍されるかを示す次の一方。
EXIT_FN_SOURCE_VAL EXIT_FN_TARGET_VAL
requesting_before_after_ind内部入力として使用されます。設定は不要です。設定しても無視されます。
出力
decompressed_rec解凍済フォーマットで返されるレコードへのポインタ。レコードは、Oracle GoldenGate内部正規フォーマットとみなされます。コール元は、decompressed_recに割り当てる適切な量のメモリーを確保する必要があります。
decompressed_len返される解凍済レコードの長さ。
columns_present圧縮レコード内に存在する列を示す値の配列。たとえば、圧縮レコードに1番目、3番目、6番目の列が存在し、表内の列数の合計が7の場合、配列に次を含む必要があります。
1, 0, 1, 0, 0, 1, 0
マッピング・ファンクションは、この配列によって圧縮列をマップするかどうかとその時期を決定します。