0

我正在编写一个存储过程(SQL / PL - DB2 V11 或更高版本),我需要访问 SYSIBM.SYSCOLUMNS 来检索“HELLO_WORLD”表的列。

在 SYSIBM.SYSCOLUMNS 上,表“HELLO_WORLD”与不同的 TBCREATOR 一起存在。

TBCREATOR |  TBNAME      | NAME
OWN_SV    |  HELLO_WORD  | COLN1
OWN_SV    |  HELLO_WORD  | COLN2
OWN_SV    |  HELLO_WORD  | COLN3
OWN_CL    |  HELLO_WORD  | COLN1
OWN_CL    |  HELLO_WORD  | COLN2
OWN_CL    |  HELLO_WORD  | COLNA

我不会使用 DISTINCT 语句,因为列可能不同。我以为我会使用特殊寄存器 CURRENT_SCHEMA 中的值,但不幸的是不正确。

例子:

 SELECT C.NAME, C.COLNO
 FROM SYSIBM.SYSCOLUMNS C
 WHERE C.TBCREATOR = CURRENT_SCHEMA
 AND C.TBNAME = 'HELLO_WORLD'
 ORDER OF C.COLNO

CURRENT_SCHEMA 中存在的值不正确:如果存储过程被另一个进程(例如:COBOL 进程)调用,则 CURRENT_SCHEMA 与验证调用的进程相关。

使用值“USERBTC”调用我的存储过程“设置”CURRENT_SCHEMA 的进程(这是通过 JCL 执行 COBOL 进程的用户)

我的 OWNER/TBCREATOR 是“OWN_CL”,这个值在绑定参数中指定(更准确地说,参数“QUALIFIER”)

为了确保正确获取表格,我应该使用 BIND 选项中指定的 QUALIFIER(或 OWNER)。

这是可能的?你有什么建议吗?

4

0 回答 0