DECOMPRESS_RECORD
有效对象
提取和复制
说明
如果要使用 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