2014-11-24 110 views
0

我正在寻找从SQL * Plus查询结果中删除所有不必要的字符的方法。如何从SQL * Plus结果中删除不必要的字符?

仅供参考:我公司要求在我发布问题之前隐藏任何数据,因此我用XXXXXXX(单词的长度保持不变)替换了所有列名,并将所有数据替换为DDDDDDDD。我很抱歉这样做,但我不想要任何麻烦;)

第一:我想要减少所有的SQL * Plus输出到两个例子之一。

第一个是相同的PL/SQL开发人员查询的结果,它看起来像这样:

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输出编写ONE样式的最佳方法是什么?对于不同的查询集合至少会产生可读结果?

回答

1

最简单的方法 - >正好连接你的输出(让你轻松在格式化您的日期和数字上飞利益)

select   yourCharColumn1 
     ||';'|| yourCharColumn2 
     ||';'|| to_char(yourDateColumn1, 'YYYY-MM-DD HH24:MI:SS') 
     ||';'|| trim(yourCharColumn3) --trim if necessary 
from yourTable 
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> 
相关问题