我正在编写一个存储过程(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)。
这是可能的?你有什么建议吗?