检索列 - %GETCOL(动态 SQL)
可使用此函数来执行基于所指定辅助列的辅助表列查找。
%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 将使用下列条件(以所指定顺序)来确定列的编码:
- 在 %GETCOL 中明确指定的辅助表中列的 ENCODING 规范。
- 在预订中的列的 ENCODING 规范(如果在预订中指定了辅助表)。可在 Management Console 的映射详细信息视图中的编码选项卡上指定此编码值。
- 数据库中列的缺省编码。
长语法格式 - 从数据库中进行读取
%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 Server 或 CDC 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,那么此处指定的值必须为小写。
结果数据类型
检索到的列 (secondary_column_name) 的数据类型。%GETCOL 函数始终都会返回与该列的数据类型匹配的数据。对于字符(字符串)数据,该函数返回 UTF-8 字符串。
示例
要获取 %GETCOL 函数的示例和方案,请参阅相关主题列表。