Sql DB2中的表类型

Sql DB2中的表类型,sql,db2,Sql,Db2,在编写通过JDBC驱动程序连接Java和DB2的程序时,我试图编写一个程序来检索给定数据库中的所有数据(所有表中包含的所有记录)。当我运行这个程序时,我发现它基本上是有效的。然而,有几个表并没有从中收集数据。我从IBM的捆绑命令编辑器访问了这些表,发现它们包含数据。我跑 从SYSCAT.COLUMNS中选择*TABNAME='Table' 并发现这些表在SYSCAT.COLUMNS表中没有列记录。我相信我拼错了那个表名,就跑了 从SYSCAT.COLUMNS中选择* 并手动查找TABNAME下的

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

从SYSCAT.COLUMNS中选择*TABNAME='Table'

并发现这些表在SYSCAT.COLUMNS表中没有列记录。我相信我拼错了那个表名,就跑了

从SYSCAT.COLUMNS中选择*

并手动查找TABNAME下的表。我找不到它。当我跑的时候

从SYSCAT.TABLES中选择*

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


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

这很有意义,因为类型为“a”的表是另一个表的别名

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

换句话说,您应该用以下方式重写查询:

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