ストアド プロシージャ (SQL / PL - DB2 V11 以降) を作成しており、'HELLO_WORLD' テーブルの列を取得するために SYSIBM.SYSCOLUMNS にアクセスする必要があります。
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 は呼び出しを検証したプロセスに関連しています。
ストアド プロシージャ「設定」CURRENT_SCHEMA を値「USERBTC」で呼び出すプロセス (JCL 経由で COBOL プロセスを実行したユーザー)
私の OWNER/TBCREATOR は「OWN_CL」で、この値はバインド パラメータ (より正確には、パラメータ「QUALIFIER」) で指定されています。
テーブルを正しく取得するには、BIND オプションで指定された QUALIFIER (または OWNER) を使用する必要があります。
それが可能だ?何か提案はありますか?