0

ストアド プロシージャ (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) を使用する必要があります。

それが可能だ?何か提案はありますか?

4

0 に答える 0