GET_RECORD_BUFFER
有效對象
擷取與 Replicat
說明
您可以使用 GET_RECORD_BUFFER 函數來取得自訂資料欄轉換的資訊。當 MAP 或 TABLE 參數的 COLMAP 選項不足時,使用者結束程式可用於不同來源與目標記錄之間的資料對應。例如,您可使用使用者退出程式來轉換專屬日期欄位。
您可以使用 SET_RECORD_BUFFER 函數 (請參閱 SET_RECORD_BUFFER) 來修改使用 GET_RECORD_BUFFER 擷取的資料。不過,這需要瞭解以內部 Oracle GoldenGate 正規格式撰寫的資料記錄。或者,您也可以使用 SET_COLUMN_VALUE_BY_INDEX 函數 (請參閱) 或 SET_COLUMN_VALUE_BY_NAME 函數 (請參閱 @STRNCMP),在資料記錄中設定資料欄值。
刪除、插入及更新會出現在緩衝區中作為完整記錄影像。
壓縮的 SQL 更新具有下列格式:
<index> <length> <value> [<index> <length> <value> ][...]
其中:
-
<index>是表格資料欄清單中的兩個位元組索引 (第一個資料欄為零)。 -
<length>是表格的兩個位元組長度。 -
<value>是實際的資料欄值,包括下列其中一個二位元組空值指標 (如果適用)。0不是空值。-1為空值。
對於 SQL 記錄,您可以使用 DECOMPRESS_RECORD 函數 ("DECOMPRESS_RECORD ") 來解壓縮記錄以供可能操控,然後使用 COMPRESS_RECORD 函數 ("COMPRESS_RECORD ") 來再次進行壓縮 (如預期)。
語法
#include "usrdecs.h"
short result_code;
record_def record;
ERCALLBACK (GET_RECORD_BUFFER, &record, &result_code);
緩衝區
typedef struct
{
char *table_name;
char *buffer;
long length;
char before_after_ind;
short io_type;
short record_type;
short transaction_ind;
int64_t timestamp;
exit_ts_str io_datetime;
short mapped;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION */
char requesting_before_after_ind;
} record_def;
輸入
<source_or_target>
下列其中一個指示是否傳回來源或目標資料記錄的記錄緩衝區。
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
<requesting_before_after_ind>
選擇性。在 UPDATE_COMP_PK_SQL_VAL ( 主要金鑰更新的記錄 io_type 上要求記錄緩衝區時設定。使用下列其中一項來指示要存取主索引鍵更新的哪個部分。預設值為 AFTER_IMAGE_VAL。
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
輸出
<buffer>
記錄緩衝區的指標。通常,緩衝區是 exit_rec_buf_def 類型的緩衝區指標。exit_rec_buf_def 緩衝區包含即將由 Extract 或 Replicat 處理的實際記錄。呼叫類型為 EXIT_CALL_DISCARD_RECORD 時,會提供緩衝區。結束常式可以變更此緩衝區的內容,例如執行自訂對映功能。
記錄緩衝區的內容不會轉換為或從使用者結束程式的字元集轉換。它會依原樣傳送。
<length>
傳回的記錄緩衝區長度。
<io_type>
以下列其中一項方式傳回:
DDL類型:
SQL_DDL_VAL
DML類型:
DELETE_VAL
INSERT_VAL
UPDATE_VAL
- 壓縮的 SQL 更新:
UPDATE_COMP_SQL_VAL
UPDATE_COMP_PK_SQL_VAL
- 其他:
TRUNCATE_TABLE_VAL
<mapped>
指示這是否為對應記錄緩衝區的旗標 (0 或 1)。
<before_after_ind>
下列其中一項表示記錄為影像之前或之後。
BEFORE_IMAGE_VAL
AFTER_IMAGE_VAL
傳回值
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK