要使用此函数,用来启动
CDC Replication
地址空间的 z/OS 用户标识必须具有足够
DB2 for z/OS
特权以执行 SQL SELECT 语句。
注:
仅
CDC Replication Engine for DB2 for z/OS
支持此函数。
警告:
对
SQL SELECT 语句的使用可能会在您的环境中构成安全问题。某些子句和函数可能具有不良影响,这些影响会导致对
DB2 表数据的更改和/或在 DB2
的控制之外生成数据。因此,当使用 %SELECT 函数来发出 SQL SELECT 语句时,您应该很谨慎。
语法
%SELECT(sql_select_stmt, parm1, parm2, ..., parmn, [default_value1],
[default_value2], ...,[default_valuem])
示例
下列示例使用主表与辅助表之间的关系:
%SELECT(
“SELECT COUNTRY FROM DB1.GSMITH.COUNTRY WHERE BRANCH =
?”
, EMPBRANCH)
采用图中所示的主表和辅助表,可将 %SELECT 函数映射至 EMPLOYEE 表中的 EMPCOUNTRY 列。
EMPLOYEE 主表中的职员,此示例从 COUNTRY 辅助表记录返回其所在国家或地区。如果
COUNTRY 没有包含满足 WHERE 子句中条件的记录,那么此函数会返回针对 COUNTRY 列的数据类型的缺省值。例如,如果该数据类型为字符,那么会返回空白字符。
%SELECT(
“SELECT Q1, Q2, Q3, Q4 FROM DB1.GSMITH.SALES WHERE EMP = ? AND ? =
4”
, EMPID, EMPBRANCH, 0, 0, 0, 0)
采用图中所示的主表和辅助表,可将 %SELECT 函数映射至 EMPLOYEE 表中的 EMPQ1 列。
对于 EMPLOYEE
主表中的职员(其工作地点为分支 4),此示例从 SALES 辅助表记录返回其第一季度的销售数字。
由于此示例返回多个列值,所以
CDC Replication
定义三个变量(名为 Q2、Q3 和 Q4),以分别维护第二、第三和第四季度的销售数字。可使用
%VAR 函数来检索这些值,并将它们映射至 EMPLOYEE 中的 EMPQ2、EMPQ3 和
EMPQ4 列。
如果 SALES 没有包含满足 WHERE 子句中条件的记录,那么该函数会返回
0。此外,
CDC Replication
会将这三个变量(Q2、Q3 和 Q4)设置为 0。
%SELECT(
“SELECT INCOME, CODE, LASTADJDATE, NEXTADJDATE FROM DB1.GSMITH.SALARY
WHERE EMP = ? AND BRANCH = ?”
, EMPID, EMPBRANCH, 0,
“Z”
,
1970-01-01)
采用前面图中显示的主表和辅助表,可将
%SELECT 函数映射至 EMPLOYEE 表中的 EMPINCOME 列。
对于 EMPLOYEE
主表中的职员,此示例从 SALARY 辅助表记录返回其收入。
由于此示例返回多个列值,所以
CDC Replication
定义三个变量(名为 CODE、LASTADJDATE 和 NEXTADJDATE),以维护薪水信息的其他项。可使用
%VAR 函数来检索这些值,并将它们映射至必须添加至该主表的列。
SALARY 没有包含满足 WHERE 子句中条件的记录,那么:
-
%SELECT 函数返回 0。
-
CODE 变量设置为
“Z”
。
-
LASTADJDATE 变量设置为 1970-01-01。
-
NEXTADJDATE 变量设置为 1901-01-01(z/OS 缺省日期值)。
%SELECT(
“SELECT INCOME, LASTADJDATE, CODE, NEXTADJDATE
FROM DB1.GSMITH.SALARY WHERE EMP = ? AND BRANCH = ?”
, EMPID, EMPBRANCH,
0, 1970-01-01)
在此示例中,仅必须为 LASTADJDATE
指定缺省值。由于此列在 SQL SELECT 语句中列出为第三个,所以您还必须为
INCOME 和 CODE 列指定缺省值。为了避免需要为 CODE 指定缺省值,请在
SQL SELECT 语句中 CODE 前面引用 LASTADJDATE。
%SELECT(
“SELECT USED FROM DB1.GSMITH.VACATION
WHERE EMP = ? AND EMPCOUNTRY IN ('USA', 'UK', 'JAPAN', 'FRANCE')”
, EMPID, 0)
采用前面图中显示的主表和辅助表,可将
%SELECT 函数映射至 EMPLOYEE 表中的 EMPVACUSED 列。
EMPLOYEE 主表(位于美国、英国、日本或法国)中的职员,此示例从
VACATION 辅助表记录返回已用假期量。如果 VACATION 没有包含满足 WHERE 子句中条件的记录,那么
%SELECT 函数返回 0。
%SELECT(
“SELECT NEXT VALUE FOR SEQ1
FROM SYSIBM.SYSDUMMY1”
, 1)
此示例返回序列 SEQ1
的下一个值。在此情况下,结果的数据类型与序列对象的数据类型相同。此示例使用
%SELECT 函数在 DB2 for z/OS V8
或更高版本中检索某个序列的下一个值。SYSDUMMY1 是为了满足语法要求而在 SQL SELECT 语句中引用的现有 DB2
哑元系统表。
必须为第二个参数输入任何整数值,以便调用该函数。例如,1。
有关序列以及可从序列生成的值的类型的信息,请参阅
DB2 for z/OS 文档。
%SELECT(
“SELECT
PREVIOUS VALUE FOR SEQ2 FROM SYSIBM.SYSDUMMY1”
, 24)
此示例返回序列 SEQ2
的上一个值。在此情况下,结果的数据类型与序列对象的数据类型相同。
此示例使用
%SELECT 函数在 DB2 for z/OS V8
或更高版本中检索某个序列的前一个值。SYSDUMMY1 是为了满足语法要求而在 SQL SELECT 语句中引用的现有 DB2
哑元系统表。
必须为第二个参数输入任何整数值,以便调用该函数。例如,24。
有关序列以及可从序列生成的值的类型的信息,请参阅
DB2 for z/OS 文档。