【问题标题】:Is there any way to make output of my SQLPLUS script look better?有什么方法可以让我的 SQLPLUS 脚本的输出看起来更好?
【发布时间】:2021-11-04 05:36:36
【问题描述】:

我是 sql 新手。我想问一下是否有任何方法可以将我的输出格式化为看起来更复杂,更像一张表?

我的脚本是这样的

spool "\\PathToPutOutputInTextFile"
SELECT a.ARCHIVEID, count(*) as "Number of Documents", ROUND(SUM(c.CLENGTH)/1024/1024,2) as "Documents Size in MB"
        FROM ds_doc d
        INNER JOIN ds_arch a ON d.ARCHIVENO = a.ARCHIVENO
        INNER JOIN ds_comp c ON d.DOCIDNO = c.DOCIDNO
        GROUP BY a.ARCHIVEID;
spool off;

而且我还能够使用如下所示的 .bat 文件自动执行此操作

sqlplus usr/pass@nameofdb @D:\IXTENT\monitoring\ASCheck.sql -path "\\PathToPutOutputInTextFile\test.txt

我设法让它以某种方式工作,但我的输出看起来像 sh..t :/

这是我的输出。

ARCHIVEID

Number of Documents

Documents Size in MB

test_rt                                                                39
                        3.03

IL                                                                                  36
                        104

TN                                                                         139823
                20683.57


ARCHIVEID

Number of Documents

Documents Size in MB


T5                                                                               6931
               331978.15

TA                                                                                  4
                        .34

TT                                                                                 23
                        3.09

有没有什么办法让它变得复杂,看起来更像一张桌子?

非常感谢。

【问题讨论】:

  • 您可能还想探索SQLclsqlformat 选项,尤其是set sqlformat ansiconsole

标签: windows oracle cmd sqlplus


【解决方案1】:

如果您想格式化查询输出,您可以使用 RPAD(field_name, number of spaces) ... 例如 RPAD(Name, 50) ... 它会在打印时固定每个字段的宽度,并将同步查看。

【讨论】:

    【解决方案2】:

    有办法;格式化

    例如:

    SQL> select * from emp where rownum < 3;
    
         EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
    ---------- ---------- --------- ---------- -------- ---------- ----------
        DEPTNO
    ----------
          7369 SMITH      CLERK           7902 17.12.80        800
            20
    
          7499 ALLEN      SALESMAN        7698 20.02.81       1600        300
            30
    

    通过设置列的格式,你会得到

    SQL> col empno format 99999
    SQL> col ename format a8
    SQL> col mgr   format 9999
    SQL> col sal   format 9G990
    SQL> col comm  format 990
    SQL>
    SQL> select * from emp where rownum < 3;
    
     EMPNO ENAME    JOB         MGR HIREDATE    SAL COMM     DEPTNO
    ------ -------- --------- ----- -------- ------ ---- ----------
      7369 SMITH    CLERK      7902 17.12.80    800              20
      7499 ALLEN    SALESMAN   7698 20.02.81  1.600  300         30
    
    SQL>
    

    如果行太短,则加长

    SQL> set linesize 120
    

    或者,将页面放大:

    SQL> set pagesize 1000
    

    您可以使用不同的选项;请参阅 SQL*Plus 文档。

    【讨论】:

      【解决方案3】:

      一种选择是

      set echo off verify off head off feed off term off lines 120 pages 0
      col "Number of Documents" for 9999999999
      col "Documents Size in MB" for 9999999999
      col ARCHIVEID for a30
      spool "\\PathToPutOutputInTextFile"
      SELECT a.ARCHIVEID, count(*) as "Number of Documents", ROUND(SUM(c.CLENGTH)/1024/1024,2) as "Documents Size in MB"
              FROM ds_doc d
              INNER JOIN ds_arch a ON d.ARCHIVENO = a.ARCHIVENO
              INNER JOIN ds_comp c ON d.DOCIDNO = c.DOCIDNO
              GROUP BY a.ARCHIVEID;
      spool off;
      

      但是,如果您想使用此文件将数据加载到另一个数据库中,一个不错的选择是使用 set markup csv ,假设您拥有 Oracle 12 或更高版本。

      set echo off verify off head off feed off term off lines 120 pages 0
      set markup csv delimiter ";"
      spool "\\PathToPutOutputInTextFile"
      SELECT a.ARCHIVEID, count(*) as "Number of Documents", ROUND(SUM(c.CLENGTH)/1024/1024,2) as "Documents Size in MB"
              FROM ds_doc d
              INNER JOIN ds_arch a ON d.ARCHIVENO = a.ARCHIVENO
              INNER JOIN ds_comp c ON d.DOCIDNO = c.DOCIDNO
              GROUP BY a.ARCHIVEID;
      spool off;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2015-03-17
        • 1970-01-01
        • 2017-05-02
        • 2013-08-05
        • 2014-03-08
        • 2021-02-18
        相关资源
        最近更新 更多