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

没有办法可靠地做到这一点。实际上,也没有办法做到不可靠。我看到您已经尝试设置环境变量 COLUMNS 和(也许)LINES,但isql似乎忽略了它们。您可以尝试破解您的 termcap 或 terminfo 条目,以便它说明您拥有多少列,但它远非理想(并且仍然可能无法正常工作)。

如果您想要统一、可预测的输出,请使用IIUG Software Archive中的 SQLCMD (它不是 Microsoft johnny-come-lately 的同名程序!)。

作为一般参考:您使用的是哪个版本的 ISQL,在哪个平台上,以及您使用的是哪个版本的 Informix DBMS?在问题中包含该信息总是有帮助的。例如,“ ISQL 7.50.FC3 和 IDS 11.50.FC6 在 Solaris 10 上”。

于 2010-12-23T00:44:13.617 回答
1

我将假设您在任何平台上使用 ISQL 7.50 或更早版本:当您说 ISQL UI 时,我还假设菜单驱动编辑器?...如“isql dbname -qr sqlproc.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 回答