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

Posted

技术标签:

【中文标题】使用 SQL 查询查找 Informix 表和列详细信息【英文标题】:Find Informix table and column details using SQL query 【发布时间】:2011-09-06 11:11:45 【问题描述】:

我想获取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】:

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

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

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

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

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

【讨论】:

以上是关于使用 SQL 查询查找 Informix 表和列详细信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用错误消息中指定的 tbspaceid tableid 在 DB2 中查找表和列

有没有办法列出 ORACLE 查询中使用的表和列? [复制]

Hibernate MySQL 查找未映射的表和列

透视sql server多个表和列

如何MyBatis中使用动态SQL查询与注释

sql Oracle所有表和列