2011-09-06 53 views
5

我想Informix數據庫表信息和列信息,如使用SQL查詢

  • 表名查找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查詢來獲取上述表的總細節?

回答

3

哇!這是一個複雜的查詢 - 最好視爲至少兩個,可能是三個查詢;或者也許這就是你想到的。

您可能希望在第一個查詢選擇tabidowner,這是很好的形式使用"informix".systables而不僅僅是systables(雖然只有真正在ANSI模式數據庫的問題,但是它確實事一樣)。

關於syscolumns的查詢很好,儘管t.tabid >= 100子句可能是多餘的,除非您明確想阻止人們瞭解系統目錄表中的列。此外,瞭解視圖中的列可能會有所幫助,因此tabtype = 'T'可能過於嚴格。

解碼數據類型很費勁。對於內置的類型,它不是太困難;對於用戶定義的類型,這是相當困難的工作。 coltypecollength(和extended_d)告訴你關於類型。您可以在sqltypes.ec中找到C代碼來翻譯我的SQLCMD包中的基本類型。您可以在$INFORMIXDIR/etc/xpg4_is.sql中找到一些簡單的SQL(可能並不完整)。

約束信息存儲在sysconstraints和相關表格中。您可以在已經提到的SQLCMD源代碼中找到一些約束的代碼(文件sqlinfo.ec)。