プライマリ・コンテンツに移動
Oracle® GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIX
12c (12.1.2)
E49845-08
  目次へ移動
目次

前
 
次
 

DECOMPRESS_RECORD

適用対象

ExtractおよびReplicat

説明

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操作の処理にのみ有効です。削除、挿入、および更新は、バッファに完全なレコード・イメージで保持されます。

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

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

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

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

説明:

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

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

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

構文

#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

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

返される値

EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM