【问题标题】:How to prettify the output coming from the SELECT query in command prompt?如何在命令提示符下美化来自 SELECT 查询的输出?
【发布时间】:2013-01-10 22:24:23
【问题描述】:

我在命令提示符下运行了简单的select 查询,但输出行没有出现在一行中。见下文:

SQL> set pagesize 2000
SQL> select * from xtern_empl_rpt ;

EMP LAST_NAME
--- --------------------------------------------------
FIRST_NAME                                         SSN
-------------------------------------------------- ---------
EMAIL_ADDR
--------------------------------------------------------------------------------

YEARS_OF_SERVICE
----------------
001 Hutt
Jabba                                              896743856
jabba@thecompany.com
              18

002 Simpson
Homer                                              382947382
homer@thecompany.com
              20

003 Kent
Clark                                              082736194
superman@thecompany.com
               5

004 Kid
Billy                                              928743627
billythkid@thecompany.com
               9

005 Stranger
Perfect                                            389209831
nobody@thecompany.com
              23

006 Zoidberg
Dr                                                 094510283
crustacean@thecompany.com
               1


6 rows selected.

SQL>

你能帮我把每一行放在一行吗?

编辑

我在下面尝试过,但仍然没有美化。

SQL> SET LINESIZE 4000
SQL> select * from xtern_empl_rpt ;

EMP LAST_NAME                                          FIRST_NAME
                          SSN       EMAIL_ADDR
                                                         YEARS_OF_SERVICE
--- -------------------------------------------------- -------------------------
------------------------- --------- --------------------------------------------
-------------------------------------------------------- ----------------
001 Hutt                                               Jabba
                          896743856 jabba@thecompany.com
                                                                       18
002 Simpson                                            Homer
                          382947382 homer@thecompany.com
                                                                       20
003 Kent                                               Clark
                          082736194 superman@thecompany.com
                                                                        5
004 Kid                                                Billy
                          928743627 billythkid@thecompany.com
                                                                        9
005 Stranger                                           Perfect
                          389209831 nobody@thecompany.com
                                                                       23
006 Zoidberg                                           Dr
                          094510283 crustacean@thecompany.com
                                                                        1

6 rows selected.

SQL>

【问题讨论】:

    标签: oracle sqlplus


    【解决方案1】:

    设置列宽以适应屏幕

    例如:

    column EMAIL_ADDR format a30 
    

    其中 a 是列宽。您可以使用 WRA 包装列 例如

    column EMAIL_ADDR format a30 WRA
    

    或TRU 截断,WOR 打破单词边界

    例如:

    SQL> select * from emp;
    
            ID FIRST_NAME
    ---------- ------------------------------
    LAST_NAME
    ------------------------------
    EMAIL_ADDR
    --------------------------------------------------
             1 Dazza
    Smith
    d_dazzal@dazzal.com
    

    所以输出有点难以阅读,因为 email_addr 被填充到 300 个字符(因为我的表已将其定义为 sql*plus 用于格式化输出的 varchar2(300))。

    先设置一个合适的linesize:

       SQL> set linesize 100 
    

    现在让我们设置列,使其适合一行(linesize 应该大于总 col 宽度):

       SQL> column email_addr format a30 
       SQL> column last_name format a20 
       SQL> column first_name format a20 
       SQL> select * from emp;
    
                ID FIRST_NAME           LAST_NAME            EMAIL_ADDR
        ---------- -------------------- -------------------- ------------------------------
                 1 Dazza                Smith                d_dazzal@dazzal.com
    

    所以现在这些列很容易适应大小合理的终端。

    在您的情况下,first_name 和 last_name 是 varchar2(50),但其中的数据要小得多,所以我将从 column first_name format a15 开始(与姓氏相同)。使用电子邮件时,您的列是 varchar2(100),但最大输出为 25 个字符,因此请先输入 column email format a25。

    如果你这样做了,你应该得到如下输出(如果 linesize 足够高):

    SQL> select * from xtern_empl_rpt ;
    
    EMP LAST_NAME       FIRST_NAME     SSN       EMAIL_ADDR                YEARS_OF_SERVICE
    --- --------------- -------------- --------- ------------------------- ----------------
    001 Hutt            Jabba          896743856 jabba@thecompany.com      18
    

    终于如约而至。 WRATRU 和 WOR。 WRA 是默认的,所以你不必使用它,但可以说我们有:

    SQL> select * from test;
    
    A
    --------------------------------------
    THIS IS A SIMPLE WRAPPING TEST
    

    但我想将其格式化为 10 个字符宽度:

    S

    QL> col a format a10 WRA
    SQL> select * from test;
    
    A
    ----------
    THIS IS A
    SIMPLE WRA
    PPING TEST
    

    WRA 表示将字符串切成 10 个字符,无论我们是否在单词中间。如果我们只想在词尾上打断(如果可能的话,大于 10 的单词仍然需要打断):

    SQL> col a format a10 WOR
    SQL> select * from test;
    
    A
    ----------
    THIS IS A
    SIMPLE
    WRAPPING
    TEST
    

    现在输出在字边界处中断,不一定在 10 个字符处。

    如果我们只想要前 10 个字符而不需要换行,我们可以使用 TRU:

    SQL> col a format a10 TRU
    SQL> select * from test;
    
    A
    ----------
    THIS IS A
    

    【讨论】:

    • 对不起,我没明白你的意思!你能更清楚地解释一下吗?可能用我的例子的语法?
    • 没问题,你是在帮我解决问题!这就是我的全部。你能帮我理解WRA,TRU,WOR吗?
    • @VBSlover 添加的示例。
    • 好的,但是如何为 all VARCHAR2 列设置这个?
    【解决方案2】:

    这应该可以解决您的问题:

    set wrap off 
    

    【讨论】:

      【解决方案3】:

      尝试类似:

      SET LINESIZE 120
      

      (将120调整为所需的最大宽度。)

      【讨论】:

      • 如果您将输出发送到文件,您应该会发现每个输出行都出现在一行中(如最初要求的那样)。如果所需的 linesize 大于控制台的最大宽度(例如,如果您的控制台显示为 80 个字符宽,但您的输出需要为 120 个字符宽),则输出可以从不显示在一条线上 - 没有足够的空间放置它。
      • 好的,那么如何将输出从控制台发送到特定文件?给我一个想法,告诉我为此需要使用哪些命令?
      • 使用SPOOL filename 将控制台的输出发送到指定的filename,使用SPOOL OFF 停止输出到filename - 有关 SPOOL 的更多信息,请参阅docs.oracle.com/cd/B19306_01/server.102/b14357/ch12043.htm,有关 Oracle 10.2 的 SQLPlus 参考指南,请参阅 docs.oracle.com/cd/B19306_01/server.102/b14357/toc.htm。
      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2014-11-22
      • 2020-02-26
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多