DB2 syscolumns 不 return 所有列

DB2 syscolumns does not return all columns

当运行一个简单的目录查询时:

SELECT * 来自 SYSCOLUMNS

我只返回了几百行。这是 AS400 上的 DB2 7.1。 schema有几十个,一千多个table。我希望这个查询 return 几千行,而不是几百行。我得到的行仅来自我的测试模式和其他开发人员的测试模式。

我是 DB2 的新手(在 Oracle 工作 20 多年),所以这很令人费解。 IBM 文档说 SELECT 被授予 SYSCOLUMNS 上的 PUBLIC,所以我应该得到所有东西,对吗?我不知道令牌 "SYSCOLUMNS" 指向什么,视图或本地 table (这可以解释事情)。在我的环境中,对数据库的每个查询都需要 SCHEMA_NAME.TABLE_NAME,因此这个 SYSCOLUMNS(没有架构名称)已经是一个例外。

提前致谢,

db

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

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

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

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

SET CURRENT SCHEMA = SOMELIB

在 *SYS 模式下,如果不指定模式,库列表用于将 table 名称解析为特定文件。

无论如何,我猜您正处于 *SQL 命名模式,并且您的当前模式设置为您的测试模式。查询未限定的 SYSCOLUMNS 将为您提供当前架构中的列。

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

SELECT * FROM QSYS2.SYSCOLUMNS