説明
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
マッピング・ファンクションは、この配列によって圧縮列をマップするかどうかとその時期を決定します。