我想获取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查询以获取上述表格的全部细节吗?
答案 0 :(得分:3)
哇!这是一个复杂的查询 - 最好被视为至少两个,可能是三个查询;或者也许这就是你的想法。
您可能希望在第一个查询中选择tabid
和owner
,这是使用"informix".systables
而不仅仅是systables
的好形式(尽管这只是真正重要的)在MODE ANSI数据库中,但它真的很重要。)
syscolumns
上的查询很好,但t.tabid >= 100
子句可能是多余的,除非你明确地希望阻止人们了解系统目录表中的列。此外,了解视图中的列可能会有所帮助,因此tabtype = 'T'
可能过于严格。
解码数据类型非常繁琐。对于内置类型,它并不太难;对于用户定义的类型,这是相当困难的工作。 coltype
和collength
(和extended_d
)告诉您类型。您可以在sqltypes.ec
中找到用于翻译SQLCMD包中基本类型的C代码。您可以在$INFORMIXDIR/etc/xpg4_is.sql
中找到一些简单的SQL(可能不完整)。
约束信息存储在sysconstraints
和相关表中。您可以在已提到的SQLCMD源(文件sqlinfo.ec
)中找到某些约束的代码。