我想获取Informix数据库表信息和列信息,例如
我能够使用这个查询找到表名和列名,以获得表名:
select tabname from systables
查找列名
SELECT TRIM(c.colname) AS table_dot_column
FROM "informix".systables AS t, "informix".syscolumns AS c
WHERE t.tabname = 'agent_status'
AND t.tabtype = 'T'
and t.tabid = c.tabid
AND t.tabid >= 100 ;
但是我无法找到列上的数据类型和约束。
有人能告诉我SQL查询以获得上面提到的表的全部细节吗?
发布于 2011-09-09 15:04:59
哇!这是一个复杂的查询--最好至少处理两个,可能是三个查询;或者这就是您想要的。
您可能希望在第一个查询中选择tabid
和owner
,最好使用"informix".systables
而不是只使用systables
(虽然这只在ANSI模式数据库中很重要,但它确实很重要)。
对syscolumns
的查询很好,尽管t.tabid >= 100
子句可能是多余的,除非您确实希望阻止人们了解系统目录表中的列。另外,了解视图中的列可能很有帮助,因此tabtype = 'T'
可能太严格了。
对数据类型进行解码是非常谨慎的。对于内置类型,这并不是太困难;对于用户定义的类型,这是相当困难的工作。coltype
和collength
(和extended_d
)告诉您类型。您可以找到C代码来翻译我的SQLCMD包中的基本类型,即sqltypes.ec
。您可以在$INFORMIXDIR/etc/xpg4_is.sql
中找到一些简单的SQL (可能不是完整的)。
约束信息存储在sysconstraints
和相关表中。您可以在已经提到的SQLCMD源代码(文件sqlinfo.ec
)中找到一些约束的代码。
https://stackoverflow.com/questions/7318953
复制相似问题