解决方法
使用首选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;
或者老式的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;
假设您正在使用最新版本的IDS,则可以按列表中未列出的列进行排序.如果您收到投诉,请将订购列添加到选择列表.
加入标准是明显的; tabtype =’T’仅列出表中列出的视图,同义词和其他类似项目; tabid> = 100只列出了数据库中明确创建的表,而不是系统目录.
这不包括类型信息 – 如果你想要,你必须做更多的工作.您将找到一个文件$INFORMIXDIR / etc / xpg4_is.sql,其中包含旧版本的XPG4(X / Open标准)信息模式(因此是文件名)的粗略近似值.在那里,还有功能等来将类型信息从syscolumns.coltype和syscolumns.collength解码为可识别的字符串.但是,我强烈怀疑它不处理DISTINCT类型,也不处理其他用户定义的类型.我很高兴被证明是错误的,但是…如果您将该文件的相关部分添加到数据库中,那么您也可以获取类型信息.
另请注意,Isql和DB-Access中的所有INFO命令都在前端进行仿真,不会在IDS服务器中执行.基本上,程序接受请求并将其转换成更复杂的sql语句.请参阅sqlCMD(可从IIUG Software Archive获取)的一部分sqlinfo.ec文件中的代码,了解我的sqlCMD程序如何处理INFO语句. (注意:sqlCMD的INFO输出格式与Isql和DB-Access的INFO输出格式不同.)