DB2 syscolumns不返回所有列

时间:2015-01-16 16:05:00

标签: db2 ibm-midrange

运行简单的目录查询时:

SELECT * 来自SYSCOLUMNS

我只回了几百行。这是AS400上的DB2 7.1。有几十种模式,共有一千多个表。我希望这个查询返回几千行,而不是几百行。我回来的行只来自我的测试模式和另一个开发人员的行。

我是DB2的新手(在Oracle工作了20多年),所以这很令人费解。 IBM文档说SELECT在SYSCOLUMNS上被授予PUBLIC,所以我应该得到一切,对吧?我不知道“SYSCOLUMNS”指向的标记,视图或本地表(它可以解释事物)。在我的环境中,对数据库的每个查询都需要SCHEMA_NAME.TABLE_NAME,因此这个SYSCOLUMNS(没有模式名称)已经是一个例外。

提前感谢,

分贝

1 个答案:

答案 0 :(得分:6)

答案取决于您正在使用的命名模式。

  • * SQL模式:您将表限定为SCHEMA.TABLE
  • * SYS模式:您将表限定为SCHEMA/TABLE

(在幕后,架构映射到库,表格映射到文件。)

在* SQL模式下,如果未指定架构,则使用CURRENT SCHEMA的值。默认情况下,您的CURRENT SCHEMA是您的用户个人资料,但您可以这样更改:

SET CURRENT SCHEMA = SOMELIB

在* SYS模式下,如果未指定架构,则库列表用于将表名解析为特定文件。

无论如何,我猜你是在* SQL命名模式,并且你当前的架构设置为你的测试架构。查询不合格的SYSCOLUMNS将为您提供当前架构中的列。

我会尝试以下操作,这应该将范围扩大到系统上的所有列:

SELECT * FROM QSYS2.SYSCOLUMNS