使用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列。
谢谢你, 富
答案 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