如何从SQL * Plus结果中删除不必要的字符?

时间:2014-11-24 08:42:46

标签: oracle sqlplus

我正在寻找一种从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输出编写一个样式的最佳方法是什么,它将为不同的查询集生成至少可读的结果?

2 个答案:

答案 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>