我正在寻找一种从SQL * Plus查询结果中删除所有不必要字符的方法。
仅供参考:我的公司要求在此处发布问题之前隐藏任何数据,因此我已将所有列名称替换为XXXXXXX(单词的长度保持不变),所有数据都替换为DDDDDDDD。我很抱歉这样做,但我不想要任何麻烦;)
首先:我想将所有SQL * Plus输出减少为两个示例中的一个。
第一个与PL / SQL Developer中的查询结果相同,看起来像这样:
DDDD,DDDD,DDDDDD,DDDDDDDDD,,,DDDDDDDDDDDD,DDDDDDD,DDDDDDDDD,D,DDDDDDDDD,DDDDDDDDD, ,DDD,DDD,DDD,D
DDDD,DDDD,DDDDDD,DDDDDDDDD,,,DDDDDDDDDDDD,DDDDDDD,DDDDDDDDD,D,DDDDDDDDD,DDDDDDDDD, ,DDD,DDD,DDD,D
DDDD,DDDD,DDDDDD,DDDDDDDDD,,,DDDDDDDDDDDD,DDDDDDD,DDDDDDDDD,D,DDDDDDDDD,DDDDDDDDD, ,DDD,DDD,DDD,D
第二种可能性(使用列名,作为SQLPlus中的默认值:
XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXXXXXX,XXXXXXXXXXX,XXXXXXXXX, XXXX,XXXXXXXXXXXXXXXXXXX,XXXXXXXXX,X,XXXXXXXXX,XXXXXXXXX, X,XXXXXXXXXXXX,XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX
------------------,------------------,------------------------,----------------------,-----------,---------,------------,-------------------,---------,-,---------,---------,---,------------,----------------,----------------,----------------
DDDD, DDDD, DDDDDD, DDDDDDDDD, , ,DDDDDDDDDDDD, DDDDDDD,DDDDDDDDD,D,DDDDDDDDD,DDDDDDDDD,DDD, DDD, DDD, DDD, D
你有基础知识。现在。对于我目前的结果。
纯SQLPlus结果,只有一个修改
set colsep ','
看起来像这样:
XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX
------------------,------------------
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXX
--------------------------------------------------------------------------------
XXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXX ,XXXXXXXXX,X,XXXXXXXXX
--------------------------------------------------,---------,-,---------
XXXXXXXXX,X,XXXXXXXXXXXX ,XXXXXXXXXXXXXXXX
---------,-,--------------------------------------------------,----------------
XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX
----------------,----------------
DDDD, DDDD
正如你所看到的,那里有很多---------,我展示的结果部分只是覆盖了前2列(DDDD,DDDD)的结果。没有必要粘贴所有结果,但它们看起来一样。列名和----------的混合重复多次,只是为了涵盖一两个结果。这使得所有结果完全不可读。
我试图用这组命令做同样的事情:
set heading off
set recsep off
我得到的结果是关闭到我想要的......但仍然有很多不必要的空格和换行符(我假设换行符来自
linesize
属性。
看起来像这样:
DDDDDDD, DDDDDDD
DDDDDDD ,DDDDDDDDD,D,DDDDDDDDD
DDDDDDDDD, ,DD , DDD
DDD, D
有没有办法删除所有不必要的空格和换行符?
为SQLPlus输出编写一个样式的最佳方法是什么,它将为不同的查询集生成至少可读的结果?
答案 0 :(得分:1)
最简单的方式 - >只需连接您的输出(为您提供轻松格式化日期和数字的好处)
select yourCharColumn1
||';'|| yourCharColumn2
||';'|| to_char( yourDateColumn1, 'YYYY-MM-DD HH24:MI:SS')
||';'|| trim( yourCharColumn3 ) --trim if necessary
from yourTable
答案 1 :(得分:0)
SQL*Plus
提供了许多formatting options
。您可以选择相应地使用它们。
SET LINESIZE 1000
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET TERMOUT OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
SET COLSEP |
SET NEWPAGE NONE
SET PAGESIZE 0
SET SPACE 0
让我们看一个演示。
原始输出,没有任何格式。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7566 JONES MANAGER 7839 02-APR-81 2975
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.
让我们格式化并看看。
SQL> SET LINESIZE 16000
SQL> SET ECHO OFF
SQL> SET FEEDBACK OFF
SQL> SET VERIFY OFF
SQL> SET HEADING OFF
SQL> SET TERMOUT OFF
SQL> SET TRIMOUT ON
SQL> SET TRIMSPOOL ON
SQL> SET COLSEP |
SQL> SET NEWPAGE NONE
SQL> SET PAGESIZE 0
SQL> SET SPACE 0
SQL>
SQL> select * from emp;
7369|SMITH |CLERK | 7902|17-DEC-80| 800| | 20
7499|ALLEN |SALESMAN | 7698|20-FEB-81| 1600| 300| 30
7521|WARD |SALESMAN | 7698|22-FEB-81| 1250| 500| 30
7566|JONES |MANAGER | 7839|02-APR-81| 2975| | 20
7654|MARTIN |SALESMAN | 7698|28-SEP-81| 1250| 1400| 30
7698|BLAKE |MANAGER | 7839|01-MAY-81| 2850| | 30
7782|CLARK |MANAGER | 7839|09-JUN-81| 2450| | 10
7788|SCOTT |ANALYST | 7566|19-APR-87| 3000| | 20
7839|KING |PRESIDENT| |17-NOV-81| 5000| | 10
7844|TURNER |SALESMAN | 7698|08-SEP-81| 1500| 0| 30
7876|ADAMS |CLERK | 7788|23-MAY-87| 1100| | 20
7900|JAMES |CLERK | 7698|03-DEC-81| 950| | 30
7902|FORD |ANALYST | 7566|03-DEC-81| 3000| | 20
7934|MILLER |CLERK | 7782|23-JAN-82| 1300| | 10
SQL>