【问题标题】:Informix DB; query output, forcing table output?信息数据库;查询输出,强制表输出?
【发布时间】:2015-11-26 20:38:12
【问题描述】:

所有..

我目前在一些基于 IBM AIX OS 的旧系统上使用一些具有 Informix DB 的系统。我发现自己需要使用命令行“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 工具查询数据库时,这不是问题...

【问题讨论】:

    标签: database output informix aix


    【解决方案1】:

    很遗憾,在 DB-Access 中无法控制这种行为。

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

    您可以尝试弄乱您的终端设置,以便 DB-Access 在启动时知道终端宽度超过 80 个字符,但我一直发现这比科学更幸运,而您仍会触发某些查询而不是其他查询的行为。

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

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

    【讨论】:

      【解决方案2】:

      好的..

      虽然我发现 RET 提供的答案是正确的,并且几乎总结了我在网上找到的答案,但我还发现了一些变通方法,可以让你获得想要的东西,但是很笨拙大大地!感谢 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”文件的内容,并将管道分隔的内容转换为空格分隔的内容并输出到屏幕。

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

      【讨论】:

        【解决方案3】:

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

        例子:

        export DBACCESS_COLUMNS=1000
        

        【讨论】:

          猜你喜欢
          • 2014-09-05
          • 2021-02-02
          • 1970-01-01
          • 2022-12-11
          • 1970-01-01
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          相关资源
          最近更新 更多