Oracle 如何从SQL*Plus结果中删除不必要的字符?
我正在寻找一种从SQL*Plus查询结果中删除所有不必要字符的方法 仅供参考:我的公司要求我在这里发布问题之前隐藏任何数据,因此我已将所有列名替换为XXXXXX(字长保持不变),并将所有数据替换为DDDD。很抱歉这么做,但我不想惹麻烦;)强> 首先:我想将所有SQL*Plus输出减少到两个示例中的一个 第一个与PL/SQL Developer中的查询结果相同,如下所示:Oracle 如何从SQL*Plus结果中删除不必要的字符?,oracle,sqlplus,Oracle,Sqlplus,我正在寻找一种从SQL*Plus查询结果中删除所有不必要字符的方法 仅供参考:我的公司要求我在这里发布问题之前隐藏任何数据,因此我已将所有列名替换为XXXXXX(字长保持不变),并将所有数据替换为DDDD。很抱歉这么做,但我不想惹麻烦;) 首先:我想将所有SQL*Plus输出减少到两个示例中的一个 第一个与PL/SQL Developer中的查询结果相同,如下所示: DDDD,DDDD,DDDDDD,DDDDDDDDD,,,DDDDDDDDDDDD,DDDDDDD,DDDDDDDDD,D,DDD
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
XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX
------------------,------------------
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXX
--------------------------------------------------------------------------------
XXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXX ,XXXXXXXXX,X,XXXXXXXXX
--------------------------------------------------,---------,-,---------
XXXXXXXXX,X,XXXXXXXXXXXX ,XXXXXXXXXXXXXXXX
---------,-,--------------------------------------------------,----------------
XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX
----------------,----------------
DDDD, DDDD
DDDDDDD, DDDDDDD
DDDDDDD ,DDDDDDDDD,D,DDDDDDDDD
DDDDDDDDD, ,DD , 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 ','
看起来像这样:
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
XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX
------------------,------------------
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXX
--------------------------------------------------------------------------------
XXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXX ,XXXXXXXXX,X,XXXXXXXXX
--------------------------------------------------,---------,-,---------
XXXXXXXXX,X,XXXXXXXXXXXX ,XXXXXXXXXXXXXXXX
---------,-,--------------------------------------------------,----------------
XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX
----------------,----------------
DDDD, DDDD
DDDDDDD, DDDDDDD
DDDDDDD ,DDDDDDDDD,D,DDDDDDDDD
DDDDDDDDD, ,DD , DDD
DDD, D
如您所见,这里有大量的------,我向您展示的结果仅涵盖了前两列的结果(DDDD,dddddd)。不需要粘贴所有结果,但它们看起来是一样的。列名和------的组合重复了很多次,只是为了覆盖一两个结果。这使得所有结果都完全无法读取
我已尝试对这组命令执行相同的操作:
set heading off
set recsep off
我得到的结果接近我想要的…但仍然充满了不必要的空格和换行符(我假设换行符来自
linesize
财产
看起来是这样的:
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
XXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX
------------------,------------------
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXX
--------------------------------------------------
XXXXXXXXX
--------------------------------------------------------------------------------
XXXX
--------------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXX ,XXXXXXXXX,X,XXXXXXXXX
--------------------------------------------------,---------,-,---------
XXXXXXXXX,X,XXXXXXXXXXXX ,XXXXXXXXXXXXXXXX
---------,-,--------------------------------------------------,----------------
XXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXX
----------------,----------------
DDDD, DDDD
DDDDDDD, DDDDDDD
DDDDDDD ,DDDDDDDDD,D,DDDDDDDDD
DDDDDDDDD, ,DD , DDD
DDD, D
有没有办法删除所有不必要的空格和换行符
为SQLPlus输出编写一个样式的最佳方法是什么,该样式将为不同的查询集生成至少可读的结果?最简单的方法->只需连接输出(让您可以轻松地动态格式化日期和数字)
SQL*Plus
提供了许多格式选项
。您可以选择相应地使用它们
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>