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> ][...]
其中:
-
<index>是表格資料欄清單中的兩個位元組索引 (第一個資料欄為零)。 -
<length>是表格的兩個位元組長度。 -
<value>是實際的資料欄值,包括下列其中一個二位元組空值指標 (如果適用)。0不是空值。-1為空值。
語法
#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