GET_RECORD_BUFFER
有效对象
提取和复制
说明
使用 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 缓冲区包含提取或复制将要处理的实际记录。调用类型为 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