使用SQL查询查找Informix表和列详细信息

时间:2011-09-06 11:11:45

标签: sql informix

我想获取Informix数据库表信息和列信息,如

  • 表名称
  • 表格的列名称
  • 列的数据类型
  • 数据类型长度(例如:如果列是varchar)
  • 列的约束

我能够使用此查询找到表名和列名以获取表名:

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查询以获取上述表格的全部细节吗?

1 个答案:

答案 0 :(得分:3)

哇!这是一个复杂的查询 - 最好被视为至少两个,可能是三个查询;或者也许这就是你的想法。

您可能希望在第一个查询中选择tabidowner,这是使用"informix".systables而不仅仅是systables的好形式(尽管这只是真正重要的)在MODE ANSI数据库中,但它真的很重要。)

syscolumns上的查询很好,但t.tabid >= 100子句可能是多余的,除非你明确地希望阻止人们了解系统目录表中的列。此外,了解视图中的列可能会有所帮助,因此tabtype = 'T'可能过于严格。

解码数据类型非常繁琐。对于内置类型,它并不太难;对于用户定义的类型,这是相当困难的工作。 coltypecollength(和extended_d)告诉您类型。您可以在sqltypes.ec中找到用于翻译SQLCMD包中基本类型的C代码。您可以在$INFORMIXDIR/etc/xpg4_is.sql中找到一些简单的SQL(可能不完整)。

约束信息存储在sysconstraints和相关表中。您可以在已提到的SQLCMD源(文件sqlinfo.ec)中找到某些约束的代码。