24

Informix iSQL には、info tables;すべてのテーブルを表示するコマンド " " があります。
フィールドとそれぞれのデータ型を表示するための構文は " info columns for table;"です。

すべてのテーブルとすべてのフィールドの table.field を表示する同様のコマンドはありますか?

4

4 に答える 4

38

推奨される JOIN 表記の使用:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
  FROM "informix".systables  AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;

または昔ながらの join-in-where-clause 表記:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
  FROM "informix".systables AS t, "informix".syscolumns AS c
 WHERE t.tabid = c.tabid
   AND t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;

十分に新しいバージョンの IDS を使用していると仮定すると、select-list で引用されていない列で並べ替えることができます。苦情が寄せられた場合は、順序付け列を選択リストに追加してください。

結合基準は明らかです。tabtype = 'T' はテーブルのみをリストし、ビュー、シノニム、および systables にリストされているその他のアイテムはリストしません。tabid >= 100 は、システム カタログではなく、データベースで明示的に作成されたテーブルのみを一覧表示します。

これには型情報は含まれません。必要な場合は、もう少し作業を行う必要があります。$INFORMIXDIR/etc/xpg4_is.sql古いバージョンの XPG4 (X/Open 標準) 情報スキーマ (したがって、ファイル名) に大まかな近似を含むファイルが見つかります。そこには、型情報を認識可能な文字列からデコードしたり、認識可能な文字列に変換したりする関数などがありsyscolumns.coltypeますsyscolumns.collength。ただし、DISTINCT 型やその他のユーザー定義型を処理しないと強く思います。間違っていることが証明されてうれしいですが...そのファイルの関連部分をデータベースに追加すると、型情報も取得できるはずです。

また、ISQL および DB-Access のすべての INFO コマンドは、IDS サーバーでは実行されず、フロントエンドでシミュレートされることに注意してください。基本的に、プログラムは要求を受け取り、それをより複雑な SQL ステートメントに変換します。SQLCMD プログラムが INFO ステートメントを処理する方法については、SQLCMD ( IIUG ソフトウェア アーカイブsqlinfo.ecから入手可能) の一部であるファイル内のコードを参照してください。(注: SQLCMD の INFO 出力の形式は、ISQL および DB-Access の INFO 出力とは異なります。)

于 2009-09-04T22:36:59.110 に答える