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> ][...]

其中:

对于 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>

作为以下项之一返回:

SQL_DDL_VAL
DELETE_VAL
INSERT_VAL
UPDATE_VAL
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