Informix SQL - 列出所有字段和表

Che*_*eso 19 sql informix field isql

Informix iSQL有一个info tables;显示所有表的命令" ".
查看字段及其各自数据类型的语法是" info columns for table;"

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

Jon*_*ler 32

使用首选的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;
Run Code Online (Sandbox Code Playgroud)

或老式的join-in-where-clause符号:

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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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