Informix DB;查询输出,强制表输出?

时间:2015-09-01 14:39:10

标签: database output informix aix

所有..

我目前正在使用一些在一些较旧的基于IBM AIX OS的系统上具有Informix数据库的系统。我发现自己需要使用命令行“dbaccess”功能来进行一些快速查询。 Informix以这种格式有一个非常讨厌的返回输出习惯:

employee           -1
record_desc        Update
field_id           2 
value           
opr_activity_date  20150831
opr_activity_time  1 

employee           -1
record_desc        Update
field_id           2
value
opr_activity_date  20150831
opr_activity_time  1

employee           -1
record_desc        Update
field_id           2
value
opr_activity_date  20150831
opr_activity_time  1

MySQL,MSSQL等。所有输出表格格式都更具可读性。

city            state zipcode
Sunnyvale       CA    94086
San Francisco   CA    94117
Palo Alto       CA    94303
Redwood City    CA    94026
Los Altos       CA    94022
Mountain View   CA    94063
Palo Alto       CA    94304
Redwood City    CA    94063

我注意到Informix会/可以以列/表格式输出,但我没有想出任何押韵或理由如何决定平面与表格格式。

知道如何强制Informix始终通过命令行显示在列/表输出中吗?

显然,当我靠近计算机并且可以使用我的GUI工具查询数据库时,这不是问题......

3 个答案:

答案 0 :(得分:2)

不幸的是,在DB-Access中无法控制此行为。

如果所选列的宽度(加上一个小空格)超过了终端的宽度,则DB-Access会切换到该块格式,因为它不支持横向滚动。这是押韵和理由。

你可以尝试搞乱你的终端设置,以便DB-Access在启动时意识到终端宽度超过80个字符,但我总能发现它比科学更幸运对此,你仍会触发某些查询的行为,而不是其他查询。

当我需要执行您正在描述的内容时 - 即时,简单的疑难解答查询等 - 我倾向于在VIM而不是DB-Access中工作,并使用宏来运行查询并格式化输出。 (这是在幕后使用DBI :: Shell。)我还有一个程序接受表名或SQL语句并输出制表符分隔,CSV或旧式ASCII字符格式的结果表。这也是基于perl的。如果有兴趣,我可以发布其中任何一个。

我认为Jonathan Leffler的SQLCMD程序也可以代替DB-Access来生成任意宽的输出。

答案 1 :(得分:0)

确定..

虽然我发现RET提供的答案是正确的并且几乎总结了我能够在网上找到的内容,但我也发现了一些能够获得你想要的东西的解决方法,但是在kludgy中办法!谢谢Informix! :(

打开数据库系统的两个终端窗口,启动dbaccess并进行身份验证并连接到数据库。

接下来执行以下操作:

unload to /home/(user)/out  ...the query...

示例:

unload to /home/jewettg/out  select * from books_checked_in;

它会将查询结果输出到文件中,并返回返回结果的行数。

在第二个终端上,这是很酷的事情,运行以下命令:

column -t -s '|' /home/(user)/out

这将获取“out”文件的内容,并将竖线分隔的内容转换为空格分隔内容并将其输出到屏幕。

就像我说的那样,kludgy,但它确实有效!

答案 2 :(得分:0)

您可以通过设置 DBACCESS_COLUMNS 环境变量来做到这一点。从 12.10.xC9 版本开始支持。

示例:

export DBACCESS_COLUMNS=1000