Chr*_*örz 0 db2 select system-tables
我在使用DB2时发现了一个奇怪的行为,SYSIBM.SYSCOLUMNS而且只出现在一个表中.
这是我的查询:
select distinct NAME, COLTYPE, LENGTH, SCALE, REMARKS from SYSIBM.SYSCOLUMNS where TBNAME='Table1';
Run Code Online (Sandbox Code Playgroud)
通常结果显示每个表一次.
|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1 | ..... |......|.....|.......|
|col2 | ..... |......|.....|.......|
|col3 | ..... |......|.....|.......|
|===================================|
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用一个特定的表,让我们调用它Table2,每列显示两次:
|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1 | ..... |......|.....|.......|
|col1 | ..... |......|.....|.......|
|col2 | ..... |......|.....|.......|
|col2 | ..... |......|.....|.......|
|col3 | ..... |......|.....|.......|
|col3 | ..... |......|.....|.......|
|===================================|
Run Code Online (Sandbox Code Playgroud)
但是只有我REMARKS在select语句中包含它.如果我REMARKS从我的选择中删除,一切都按预期工作.
这个问题可能是什么原因?我的查询有问题吗?
你没有考虑过模式.模式A和模式B中可能有table2.
在LUW:
就个人而言,我建议使用syscat架构来查询目录.sysibm是DB2的内部,这些表可以在不同版本之间进行更改.
select TABSCHEMA, TABNAME, COLNAME, TYPENAME, LENGTH, SCALEREMARKS
from syscat.columns
where tabname = 'TABLE2'
Run Code Online (Sandbox Code Playgroud)