GET_COL_METADATA_FROM_INDEX
有效对象
提取和复制
说明
使用 GET_COL_METADATA_FROM_INDEX 函数可通过指定所需列的索引来检索列元数据。
数据库对象名称的返回方式与托管数据库中定义的名称完全相同,包括字母大小写。
语法
#include "usrdecs.h"
short result_code;
col_metadata_def column_meta_rec;
ERCALLBACK (GET_COL_METADATA_FROM_INDEX, &column_meta_rec, &result_code);
缓冲区
typedef struct
{
short column_index;
char *column_name;
long max_name_length;
short native_data_type;
short gg_data_type;
short gg_sub_data_type;
short is_nullable;
short is_part_of_key;
short key_column_index;
short length;
short precision;
short scale;
short source_or_target;
} col_metadata_def;
输入
<column_index>
要返回的列值的列索引。
<max_name_length>
返回的列名的最大长度。通常,最大长度是名称缓冲区的长度。由于返回的名称以 Null 结尾,因此最大长度应等于列名称的最大长度。
<source_or_target>
以下项之一,用于指示正在压缩源记录还是目标记录。
EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL
输出
<column_name>
要返回的列值的列名。
actual_name_length
返回名称的实际长度。
value_truncated
指示值是否被截断的标志(0 或 1)。如果列名的长度加上 NULL 终结符超过了最大缓冲区长度,则会发生截断。
<native_data_type>
列的本机(到数据库)数据类型。根据进程,将返回 native_data_type 或 dd_data_type,如下所示:
-
如果 Extract 正在对源列发出回调请求,则返回
native_data_type。如果 Extract 正在请求映射的目标列,则返回gg_data_type(假定系统上有一个目标定义文件)。 -
如果提取数据泵正在对源列发出回调请求,并且存在本地数据库,则返回
native_data_type。如果没有数据库,则返回gg_data_type(假设系统上存在源定义文件)。如果泵正在请求目标列,则返回gg_data_type(假定系统上存在目标定义文件)。 -
如果 Replicat 正在对源列发出回调请求,则返回
gg_data_type(假设系统上存在源定义文件)。如果 Replicat 正在请求源列,并且参数文件中正在使用ASSUMETARGETDEFS,则返回native_data_type。如果 Replicat 正在请求目标列,则返回native_data_type。
<gg_data_type>
列的 Oracle GoldenGate 数据类型。
<gg_sub_data_type>
列的 Oracle GoldenGate 子类型。
<is_nullable>
指示列是否允许空值的标志(TRUE 或 FALSE)。
<is_part_of_key>
指示该列是否为 Oracle GoldenGate 使用的密钥的一部分的标志(TRUE 或 FALSE)。
<key_column_index>
指示列在索引中的顺序。例如,下表有两个键列,它们的顺序与在主键中声明它们的顺序不同。
CREATE TABLE ABC
(
cust_code VARCHAR2(4),
name VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
PRIMARY KEY (city, cust_code)
USING INDEX
);
对逻辑列顺序中的每个列执行回调函数将返回以下结果:
-
cust_code返回1 -
name返回-1 -
city返回0 -
state返回-1
如果列是键的一部分,则返回的值是列在键中的顺序。
如果该列不是键的一部分,将返回值 -1。
<length>
返回列的长度。
<precision>
如果是数值数据类型,则返回列的精度。
<scale>
如果是数值数据类型,则返回比例。
返回值
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_EXCEEDED_MAX_LENGTH
EXIT_FN_RET_INVALID_COLUMN
EXIT_FN_RET_OK