如何从命令行在Informix isql查询中设置列宽

时间:2010-12-22 22:11:14

标签: command-line informix isql

使用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列。

谢谢你, 富

2 个答案:

答案 0 :(得分:1)

没有办法可靠地做到这一点。实际上,也没有办法不可靠地做到这一点。我看到你已经尝试设置环境变量COLUMNS和(也许)LINES,但是isql似乎忽略了它们。你可以尝试攻击你的termcap或terminfo条目,因此它会说你有很多列,但它远非理想(并且仍然可能不起作用)。

如果你想要统一的,可预测的输出,请使用IIUG Software Archive中的SQLCMD(这不是微软约翰尼最近的同名程序!)。

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

答案 1 :(得分: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