检索列 - %GETCOL(动态 SQL)

可使用此函数来执行基于所指定辅助列的辅助表列查找。

注: 本主题包含有关任何 CDC Replication 复制引擎(除了 CDC Replication Engine for DB2® for iCDC Replication Engine for Netezza® Technology 之外)支持的 %GETCOL 函数的信息。

%GETCOL 函数会从辅助表列中检索数据。要在复制之前使用此函数,必须将所派生列添加到主表中,然后在该列中输入使用 %GETCOL 函数的表达式。为目标列输入表达式时,也可使用此函数。

要使用此函数,辅助表必须具有 WHERE 子句列。必须按名称指定 WHERE 子句列,并且您必须为每个 WHERE 子句列都提供一个值表达式。值表达式可引用在复制表中的任何列,并且会在表达式中对所捕获列值进行替代。

如果辅助列具有不同数据类型,那么必须使用转换列函数(例如 %TOCHAR)将它们转换为相应数据类型。

如果使用的是 CDC Replication Engine for DB2 for z/OS®,请参阅 InfoSphere® CDC for z/OS 文档中的“%GETCOL 和 %SELECT 函数调用和处理效率”主题,以获取有关使用 %GETCOL%SELECT 列函数时的性能注意事项的信息。

此函数使您可选择指定要用于辅助表中列的编码。仅当要覆盖或更改在数据库中设置并由 CDC Replication 检测到的列的缺省编码时,您才应该为 ENCODING 指定值。从辅助表检索数据时,CDC Replication 将使用下列条件(以所指定顺序)来确定列的编码:

  1. 在 %GETCOL 中明确指定的辅助表中列的 ENCODING 规范。
  2. 在预订中的列的 ENCODING 规范(如果在预订中指定了辅助表)。可在 Management Console映射详细信息视图中的编码选项卡上指定此编码值。
  3. 数据库中列的缺省编码。

长语法格式 - 从数据库中进行读取

%GETCOL(secondary_column_name, table_name, [default_value],
secondary_column_name1, key_value1, [secondary_column_name2
, key_value2, [...], secondary_column_namen,
key_valuen])

此函数读取表并根据确定的辅助列名和值返回所指定列的值。如果指定包含空格的表或列名,那么必须用方括号将该名称括起来。例如,输入 [EMP NY] 以引用名为 “EMP NY” 的表。

具有可选 ENCODING 规范的长语法格式

%GETCOL(secondary_column_name [ENCODING encoding], table_name, 
[default_value], secondary_column_name1 [ENCODING encoding1],
key_value1, [secondary_column_name2 [ENCODING encoding2], key_value2, 
[...], secondary_column_namen [ENCODING encodingn], key_valuen])

短语法格式 - 从现有 &GETCOL 结果中进行读取

%GETCOL(secondary_column_name, table_name, default_value)

此函数会从先前的 %GETCOL 函数调用所检索到的行返回指定列的值。短语法可让您从表(先前已使用 %GETCOL 函数读取该表)中检索到多个列,而不必再次读取该表。必须使用此函数的长语法格式来指定编码。

在 %GETCOL 函数调用的短格式中指定的参数 table_name 必须与在 %GETCOL 函数调用的长格式中指定的参数 table_name 一致。如果读取操作未成功,或先前未执行 %GETCOL 函数调用,那么 CDC Replication 会生成一条错误消息,并会根据所派生列(该列中使用了 %GETCOL 函数)的数据类型将所派生列的值设置为缺省值。

参数

secondary_column_name
指定辅助表中列的名称。您不能为此参数指定表达式。如果所指定列不存在于辅助表中,那么在验证包含 %GETCOL 函数的表达式时 CDC Replication 会生成一条错误消息。如果要覆盖或更改由数据库设置并由 CDC Replication 检测到的列的缺省编码,那么可选择使用 ENCODING <encoding> 来指定该列的编码的 ISO/IANA 名称。CDC Replication Engine for DB2 for z/OS 不支持 ENCODING <encoding>。仅当使用长语法格式时,才支持此选项。

如果使用的是 CDC Replication Engine for Informix®,那么此处指定的值必须为小写。

table_name
指定表的名称。在指定此参数时,请注意下列事项:
  • 对于 CDC Replication Engine for Oracle databases,可采用格式 'OWNER_NAME.TABLE_NAME' 指定表名,其中所有者和表为大写形式。如果省略所有者名称,那么 CDC Replication 假定所有者是安装 CDC Replication 的用户。如果无法确定表的所有权,那么 CDC Replication 对所有者名称采用缺省值 PUBLIC。如果已安装 CDC Replication Engine for Microsoft SQL ServerCDC Replication Engine for Sybase databases,那么必须采用格式 database_name.owner_name.table_name 指定表名。
  • 对于 CDC Replication Engine for DB2 for z/OS,必须采用格式 owner_name.table_name'owner_name.table_name' 指定表名。
  • 对于 CDC Replication Engine for DB2 for LUW,必须采用格式 “[owner_name].table_name 或 '[owner_name].table_name' 指定表名。
default_value
指定在辅助表中找不到任何符合以下条件的行时要返回的缺省值:该行使用与主表行中引用(外部)辅助列的值匹配的键值。如果在辅助表中找不到对应行,那么缺省值会填充发送至目标的行的所派生列。如果指定 NULL 作为缺省值,那么该列必须为可空。对于某些 CDC Replication 复制引擎,这是必需参数。如果缺省值是必需的,但未在 %GETCOL 函数调用中指定,那么 CDC Replication 会产生错误。如果省略此参数,那么必须在右括号前面输入两个连续逗号(对于长语法)或一个逗号(对于短语法),以指示该参数在参数列表中的位置。在此情况下,%GETCOL 函数会根据所指定列的数据类型返回缺省值。
secondary_column_name1, secondary_column_name2, ...secondary_column_namen
确定辅助表中用来检索由 secondary_column_name 指定的辅助列的辅助列名。
DB2 UDB for z/OS API 要求 secondary_column_name 中指定的列不可空。如果 CDC Replication Engine for DB2 for z/OS 在处理 %GETCOL 函数时遇到 NULL 键值,那么它会生成一条错误消息。要确保仅针对具有非 NULL 键值的记录调用 %GETCOL 函数,请使用 %IF 函数。

如果使用的是 CDC Replication Engine for Informix,那么此处指定的值必须为小写。

key_value1, key_value2, ...key_valuen
为每个辅助列名指定相关联的键值。该键值可以是任何表达式。如果您指定主列名,那么 CDC Replication 会将该列的后映像值用作辅助表中辅助列的 key_value,以找到辅助表中的对应行。可指定多个辅助列名/键值对。

如果使用的是 CDC Replication Engine for Informix,那么此处指定的值必须为小写。

注: 对于 CDC Replication Engine for DB2 for z/OS,最多可指定九个 secondary_column_name/key_value 对。

结果数据类型

检索到的列 (secondary_column_name) 的数据类型。%GETCOL 函数始终都会返回与该列的数据类型匹配的数据。对于字符(字符串)数据,该函数返回 UTF-8 字符串。

示例

要获取 %GETCOL 函数的示例和方案,请参阅相关主题列表。