有什么方法可以使我的 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) ... 它将固定宽度打印时的每个字段将看起来同步。
我是 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) ... 它将固定宽度打印时的每个字段将看起来同步。