DECOMPRESS_RECORD

有效對象

擷取與 Replicat

說明

若要使用 GET_RECORD_BUFFER 擷取或操控整個更新記錄 (請參閱 "GET_RECORD_BUFFER ") 或 SET_RECORD_BUFFER 函數 (請參閱) 並壓縮記錄,請使用 DECOMPRESS_RECORD 函數。DECOMPRESS_RECORD 透過將記錄放入其邏輯資料欄版面配置,讓壓縮的記錄更容易處理和對應。存在的資料欄將位於沒有索引和長度指標的預期位置 (請參閱壓縮的記錄格式 )。遺漏的資料欄將顯示為零。使用時,應先呼叫 DECOMPRESS_RECORD,然後再進行任何操控。完成使用者結束處理之後,請使用 COMPRESS_RECORD 函數 (請參閱) 重新壓縮記錄,再將記錄傳回 Oracle GoldenGate 處理作業。

此函數僅適用於處理 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>

壓縮記錄的長度。使用 GET_RECORD_BUFFER (請參閱 "GET_RECORD_BUFFER ") 或 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, 0, 1, 0, 0, 1, 0

此陣列可協助對應函數判斷何時以及是否應對應壓縮的資料欄。

傳回值

EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM