SET_COLUMN_VALUE_BY_INDEX

有效对象

提取和复制

说明

使用 SET_COLUMN_VALUE_BY_INDEX 或 SET_COLUMN_VALUE_BY_NAME 函数可修改单个列值,而无需处理整个数据记录。如果使用 SET_SESSION_CHARSET 将用户出口的字符会话设置为 ucharset.h 文件的 ULIB_CS_DEFAULT 中定义的操作系统默认字符集以外的值,则将在会话字符集中解释用户出口和进程之间交换的字符数据。

仅当满足以下条件时,才会将列值设置为会话字符集:

语法

#include "usrdecs.h"
short result_code;
column_def column;
ERCALLBACK (SET_COLUMN_VALUE_BY_INDEX, &column, &result_code);

缓冲区

typedef struct
{
char *column_value;
unsigned short max_value_length;
unsigned short actual_value_length;
short null_value;
short remove_column;
short value_truncated;
short column_index;
char *column_name;
/* Version 3 CALLBACK_STRUCT_VERSION */
short column_value_mode;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION */
char requesting_before_after_ind;
char more_lob_data;
/* Version 3 CALLBACK_STRUCT_VERSION  */
ULibCharSet column_charset;
} column_def;

输入

<column_value>

指向表示新列值的缓冲区的指针。

<actual_value_length>

新列值的长度(字节)。如果新列值采用 ASCII 格式,则实际长度不应包含 NULL 终结符。

<null_value>

指示新列值是否为空值的标志(0 或 1)。如果 null_value 标志设置为 1,则数据记录中的列值将设置为 NULL。

<remove_column>

指示是否从压缩更新中删除列的标志(0 或 1)(如果存在)。压缩更新是仅记录更改的列值,而不是记录所有列值的更新。仅当记录的操作类型为 UPDATE_COMP_SQL_VAL 或 PK_UPDATE_SQL_VAL 时才应设置此标志。

<column_index>

要复制到数据记录缓冲区中的新列值的列索引。列索引从零开始。

<column_value_mode>

指明列值的格式。

EXIT_FN_CHAR_FORMAT

ASCII 格式:该值是以 null 结尾的 ASCII(或 EBCDIC)字符串(子数据类型 UTF16_BE 已有例外,该类型转换为 UTF 8。)注意:当向用户出口显示列值时,列值可能会被截断,因为该值被解释为 ASCII 字符串,并且应该以 null 结尾。0 的第一个值将成为字符串终止符。

EXIT_FN_RAW_FORMAT

内部 Oracle GoldenGate 规范格式:此格式包括两个字节的空指示符和两个字节的变量数据长度(如果适用)。对于任何字符数据类型,Oracle GoldenGate 不会为此格式执行字符集转换。

EXIT_FN_CNVTED_SESS_CHAR_FORMAT

用户出口字符集:仅当列数据类型为:

此格式未以 NULL 结尾。

<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。

输出

无

返回值

EXIT_FN_RET_BAD_COLUMN_DATA
EXIT_FN_RET_INVALID_COLUMN
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK
EXIT_FN_RET_NOT_SUPPORTED
EXIT_FN_RET_INVALID_COLUMN_TYPE