数据库;查询输出,强制输出table?

Informix DB; query output, forcing table output?

全部..

我目前正在使用一些系统,这些系统在一些基于 IBM AIX OS 的旧系统上具有 Informix DB。我发现自己需要使用命令行 "dbaccess" 功能来进行一些快速查询。 Informix 有这个非常烦人的习惯 return 以这种格式输出:

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 等.. 都以 table 格式输出更具可读性的内容..

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 will/can 以 column/table 格式输出,但我还没有弄清楚它如何决定平面格式与 table 格式的任何韵律或原因。

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

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

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

如果所选列的宽度(加上一点白色 space)超过了终端的宽度,DB-Access 会切换到该块格式,因为它不支持横向滚动。这就是韵律和道理。

您可以尝试修改您的终端设置,以便 DB-Access 在启动时知道终端宽度超过 80 个字符,但我总是发现运气比科学更重要,并且您仍然会触发某些查询的行为,而不是其他查询。

当我需要做你所描述的事情时——即席的、简单的故障排除查询等——我倾向于在 VIM 而不是 DB-Access 中工作,并使用宏来 运行 查询并格式化输出。 (这是在幕后使用 DBI::Shell。)我还有一个程序接受 table 名称或 SQL 语句并输出制表符分隔、CSV 或老式格式结果的 ASCII 字符格式 table。这也是基于 perl 的。如果有人对它们感兴趣,我可以发布其中任何一个。

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

好的..

虽然我发现 RET 提供的答案是正确的并且几乎总结了我在网上找到的内容,但我还发现了一些变通方法可以让您获得想要的东西,但在一个笨办法!感谢 Informix! :(

打开两个终端 windows 到您的数据库系统,启动 dbaccess 并验证并连接到您的数据库。

接下来执行以下操作:

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

示例:

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

它将查询结果输出到文件,return return 结果的行数。

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

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

这将抓取 "out" 文件的内容,并将竖线分隔的内容转换为 space 分隔的内容并将其输出到屏幕。

就像我说的,笨拙,但它有效!

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

示例:

export DBACCESS_COLUMNS=1000