DECOMPRESS_RECORD

有効な対象

ExtractおよびReplicat

摘要

DECOMPRESS_RECORDファンクションは、GET_RECORD_BUFFER (「GET_RECORD_BUFFER」を参照)またはSET_RECORD_BUFFERファンクション(1「SET_RECORD_BUFFER」1を参照)で更新レコード全体の取得または操作が必要なものの、レコードが圧縮されている場合に使用します。DECOMPRESS_RECORDは、レコードを論理列レイアウトに配置することにより、圧縮レコードの処理とマップを容易にします。存在する列は、索引および長さインジケータ(「圧縮レコード形式」を参照)なしで所定数位置に配置されます。紛失した列は、ゼロとして表現されます。DECOMPRESS_RECORDを使用するときには、他の操作が発生する前に呼び出す必要があります。ユーザー・イグジットが処理を完了したら、Oracle GoldenGateプロセスに返す前に、COMPRESS_RECORDファンクション(0「COMPRESS_RECORD」を参照してください)を使用してレコードを再度圧縮してください。

このファンクションは、UPDATE操作の処理にのみ有効です。削除、挿入、および更新は、バッファに完全なレコード・イメージで保持されます。

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

圧縮レコード・フォーマット

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

<index> <length> <value> [<index> <length> <value> ][...]

ここで:

構文

#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>

圧縮レコードの長さ。Use the GET_RECORD_BUFFER (see “GET_RECORD_BUFFER”) or GET_RECORD_LENGTH (see) function to get this value.

<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

マッピング・ファンクションは、この配列によって圧縮列をマップするかどうかとその時期を決定します。

戻り値

EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM