一尘不染

Informix SQL-列出所有字段和表

sql

Informix iSQL具有info tables;显示所有表的命令“ ”。
查看字段及其各自的数据类型的语法为“ info columns for table;

是否有类似的命令显示所有表和所有字段的table.field?


阅读 188

收藏
2021-03-17

共1个答案

一尘不染

使用首选的JOIN表示法:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
  FROM "informix".systables  AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;

或老式的“加入子句”表示法:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
  FROM "informix".systables AS t, "informix".syscolumns AS c
 WHERE t.tabid = c.tabid
   AND t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;

假设您使用的是最新版本的IDS,则可以按未在选择列表中引用的列进行排序。如果您有投诉,请将订购列添加到选择列表中。

连接标准很明显;tabtype =’T’仅列出表,而不列出视图,同义词和systables中列出的其他此类项目;tabid> =
100仅列出在数据库中显式创建的表,而不列出系统目录。

这不包括类型信息-如果需要,您需要做更多的工作。您会发现一个文件$INFORMIXDIR/etc/xpg4_is.sql,其中包含与XPG4(X /
Open标准)信息架构的旧版本的粗略近似(因此文件名)。在那里,有从功能等,以解码类型信息syscolumns.coltypesyscolumns.collength为可识别的字符串。但是,我强烈怀疑它不处理DISTINCT类型,也不处理其他用户定义的类型。我很高兴被证明是错误的,但是…如果您将该文件的相关部分添加到数据库中,那么您也应该能够获取类型信息。

还要注意,ISQL和DB-
Access中的所有INFO命令都是在前端模拟的,而不是在IDS服务器中执行的。基本上,程序接受请求并将其转换为更复杂的SQL语句。有关我的SQLCMD程序如何处理INFO语句,请参阅sqlinfo.ecSQLCMD的文件(可从IIUG
Software
Archive中获得
)中的代码。(注意:SQLCMD的INFO输出格式与ISQL和DB-
Access的INFO输出格式不同。)

2021-03-17