有什么方法可以使我的 SQLPLUS 脚本的输出看起来更好吗?

Is there any way to make output of my SQLPLUS script look better?

我是 sql.I 的新手,想问一下是否有任何方法可以让我的输出格式看起来更复杂,更像一个 table?

我的脚本是这样的

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

有没有办法让它变得复杂,看起来更像一个table?

非常感谢。

一个选项是

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;

有办法;格式 .

例如:

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 文档。

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