1

Informix isql UI を使用している場合、select ステートメントの結果がディスプレイの幅を超えると、出力が画面に垂直に表示されます。

1st col_1
1st col_2
1st col_3

2nd col_1
2nd col_2
2nd col_3

etc

ただし、ディスプレイの幅が十分に大きい場合は、結果が横に表示されます。

1st col_1                  1st col_2                1st col_3
2nd col_2                  2nd col_2                2nd col_3
etc.

コマンドラインから同じクエリを発行した場合: echo "select col_1, col_2, col_3" | isql -s dbname、表示がすべてのデータを水平に収めるのに十分な幅であることを認識させる方法はないようです。デフォルトで80列を使用していると思います。

誰かがこの知識を持っている場合、コマンドラインからisqlに、引数を渡すことによって、またはおそらく何らかのInformix構成で、自動的に画面の全幅を認識させる方法を知りたいです。COLUMNS 環境変数を使用しても役に立たず、stty 列も役に立ちません。

ありがとう、リッチ

4

2 に答える 2

1

どのプラットフォームでもISQL7.50以前を使用していると想定します。ISQLUIと言うときは、メニュー方式のエディターも想定しています。「isqldbname-qrsqlproc.sql」のように。

したがって、sqlproc.sqlで、OUTPUTステートメントを試してみるか、上記の例を目的のフォーマットを提供できるプログラムにパイプすることができます。

OUTPUT TO [PIPE program] /usr/frank/query1 [WITHOUT HEADINGS]
SELECT col_1, col_2, col_3 FROM tabname;

ISQLを使用しているので、他の代替手段、そしておそらく最良のオプションは、ACEレポートライターを使用して出力形式を希望に合わせてカスタマイズすることです。

FORMAT

ON EVERY ROW

PRINT COLUMN  1, col_1,
      COLUMN 20, col_2,
      COLUMN 40, col_3
于 2010-12-23T07:42:57.353 に答える
1

確実に行う方法はありません。実際、信頼できない方法もありません。環境変数 COLUMNS と (おそらく) LINES を設定しようとしたことがわかりましたが、isqlそれらを無視しているようです。termcap または terminfo エントリをハッキングして、列の数が表示されるようにすることもできますが、理想とはほど遠い (それでも機能しない可能性があります)。

均一で予測可能な出力が必要な場合は、IIUG ソフトウェア アーカイブの SQLCMD を使用してください(これは、同じ名前の Microsoft johnny-come-lately プログラムではありません!)。

一般的な参考資料として、使用している ISQL のバージョン、プラットフォーム、および使用している Informix DBMS のバージョンを教えてください。その情報を質問に含めることは常に役に立ちます。たとえば、「ISQL 7.50.FC3 with IDS 11.50.FC6 on Solaris 10」。

于 2010-12-23T00:44:13.617 に答える