DB2中的表类型

时间:2011-06-28 18:17:55

标签: sql db2

在编写通过JDBC驱动程序连接Java和DB2的程序时,我试图编写一个程序来检索给定数据库中的所有数据(包含在所有表中的所有记录)。当我运行该程序时,我发现它大部分都有效。但是,有几个表没有从中收集数据。我从IBM的捆绑命令编辑器中访问了这些表,发现它们包含数据。我跑了

  

SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME ='Table'

针对数据库,发现这些表在SYSCAT.COLUMNS表中没有列记录。我相信我拼错了那个表名,我跑了

  

SELECT * FROM SYSCAT.COLUMNS

针对数据库并手动查找TABNAME下的表。我找不到。我跑的时候

  

SELECT * FROM SYSCAT.TABLES

我在可用表列表中找到了该表。但是,在SYSCAT.TABLES中,我还发现TYPE'A'的所有表都没有SYSCAT.COLUMNS中的任何记录。我想知道IBM的推理是什么,以及如何找出这些特定类型的表的字段名称。

TL; DR如何在不使用SYSCAT.COLUMNS通过标准SQL查询到DB2数据库的情况下获取DB2的列名?

1 个答案:

答案 0 :(得分:6)

这是有道理的,因为“A”类型的表是另一个表的别名。

如果要查找类型为“A”的表的列,请查看BASE_TABSCHEMA和BASE_TABNAME列以查找别名引用的架构和表的名称。如果你查找该表,它将在syscolumns中。

换句话说,你应该这样重写你的查询:

SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME=
(SELECT BASE_TABNAME FROM SYSCAT.TABLES WHERE TABNAME = 'Table')
BTW,DB2文档包含对系统目录的完整引用。这是here