我可以访问客户的 V7R1 AS/400,并且可以运行类似SELECT NAME FROM INFORMATION_SCEMA.TABLES
和
SELECT
COLUMN_NAME,
DATA_TYPE,
TYPE_NAME,
COLUMN_SIZE,
COLUMN_TEXT
FROM "SYSIBM"."SQLCOLUMNS"
WHERE
TABLE_SCHEM = 'MYLIB'
AND TABLE_NAME = 'SOMEPF'
就好了。我是该系统的 QSECOFR 1。
但是,在PUB1.DE上运行 V5R3M0 的免费绿屏帐户上,我无法从 STRSQL 或 QSH 内的 db2 命令运行该命令。我尝试了另一种我见过的 INFORMATION_SCHEMA/TABLES 格式。我从 STRSQL 收到以下错误:
> SELECT name FROM INFORMATION_SCHEMA/TABLES
TABLES in QSYS2 type *FILE not found.
> SELECT name FROM INFORMATION_SCHEMA.TABLES
Qualified object name TABLES not valid.
这是权限问题,V5 和 V7 之间的语法差异还是其他什么?
1 - 操作系统安全官用户配置文件
您正在体验“系统命名约定”和“SQL 命名约定”模式之间的差异。最初,系统命名模式
/
在限定模式名称时需要斜杠字符作为分隔符,而 SQL 命名模式使用句.
点分隔符。v7.1 的更新现在允许在使用系统命名时使用任一分隔符。V5R3 不再受支持,也不再更新。在绿屏会话中,您可以指定STRSQL NAMING(*SYS)
. 或者在您的 JDBC/ODBC 连接字符串设置上指定系统命名约定。两种模式之间还有其他功能差异。见这里和这里。其中最主要的是系统命名模式允许使用库列表,只要您不指定 CURRENT SCHEMA。
CHGCURLIB
但是您可以使用CL 中的命令或 SQL 中的命令指定当前库CALL QCMDEXC('CHGCURLIB MYLIB',15)
(其中 15 是此示例命令的长度)DB2 for i 目录视图可以在 QSYS2 中找到。
大多数 IBM i 商店使用 10 个字符的名称(操作系统规则)并且通常不使用 DB2 允许的 128 个字符的名称,因此通常 SYSTEM_COLUMN_NAME、SYSTEM_TABLE_NAME 和 SYSTEM_SCHEMA_NAME 就足够了。
正如Dave Jones所提到的, V5R3 SQL Reference 以 PDF 格式提供。
我不是 DB2 for iSeries 方面的专家(我唯一的经验是在线帮助其他人!),所以这可能是完全错误的......
我认为
INFORMATION_SCHEMA
最近才添加了对该标准的支持。就像在 DB2 for LUW(我比较熟悉)中一样,INFORMATION_SCHEMA
可能只是对“真实”系统目录的一组相对薄的视图,在 DB2 for iSeries 上曾经位于 QSYS2 模式中(在 DB2 for LUW 中它是在 SYSCAT 中,在 DB2 for z/OS 中它在 SYSIBM 中)。似乎 DB2 for iSeries V5Rx 文档不再在线,但如果它类似于 DB2 for z/OS 目录,您将在 QSYS2.SYSTABLES 中找到您想要的信息(您可能需要将其查询为 QSYS2/SYSTABLES,具体取决于您正在使用的界面)。从我公认的生疏记忆中,你会想要这样的东西:
其中 TABLE_OWNER 是架构,而 TABLE_NAME 是名称。您应该在目录中找到各种其他有用的视图,如 SYSVIEWS、SYSCOLUMNS、SYSTRIGGERS 等。可能值得下载旧的 DB2 for iSeries 文档的 PDF,这些文档似乎仍然可用。我怀疑有关系统目录结构的信息将在“SQL 参考”之一中。