首页 > 数据库 > Oracle > [20211108]sqlplus管道过滤.txt
[20211108]sqlplus管道过滤.txt
--//我的同事基本不使用sqlplus,我自己开始学习oracle时,也是很不习惯使用,有时候某列超长,很给使用column修改。
--//还给设置pagesize,linesize大小,当然这些还给面对屏幕显示混乱的情况,使用上可以使用管道以及过滤来达到好的显示效果。
--//BTW,我现在是很少用这种方式,一般超长显示我会使用prxx.sql脚本(从tanel poder的pr.sql)修改而来。
--//我一般在linux下使用我会启动tmux下使用,tmux下可以prefix-key ,[ ,? 来查询特定字符串,这样便于我查找需要的信息。
--//通过简单的例子介绍sqlplus下使用管道以及过滤。
1.环境:
SCOTT@book> @ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//建立管道文件。
$ mkfifo /tmp/oop.pipe
$ ls -l /tmp/oop.pipe
prw-r--r-- 1 oracle oinstall 0 2021-11-08 15:33:27 /tmp/oop.pipe
2.测试1:
--//打开两个shell窗口:
--//window 1:
$ echo "select sysdate from dual ;" > /tmp/oop.pipe
--//注意加引号。
--//window 2,启动sqlplus:
SCOTT@book> @ /tmp/oop.pipe
SYSDATE
-------------------
2021-11-08 15:35:31
--//window 1:
$ echo "@dpc '' ''"> /tmp/oop.pipe
--//window 2:
SCOTT@book> @ /tmp/oop.pipe
--//显示执行计划,输出略。
--//window 1:
$ seq 10 10 40 | xargs -IQ echo "select * from dept where deptno=Q;" > /tmp/oop.pipe
--//window 2:
SCOTT@book> set echo on
SCOTT@book> @ /tmp/oop.pipe
SCOTT@book> select * from dept where deptno=10;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
SCOTT@book> select * from dept where deptno=20;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
SCOTT@book> select * from dept where deptno=30;
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO
SCOTT@book> select * from dept where deptno=40;
DEPTNO DNAME LOC
---------- -------------- -------------
40 OPERATIONS BOSTON
--//设置echo on,可以显示执行的命令。
3.测试2:
--//实际上这个我以前都讲过:
--//http://blog.itpub.net/267265/viewspace-2285749/=>[20181219]script使用小技巧.txt
--//http://blog.itpub.net/267265/viewspace-2375095/=>[20190108]rlwrap sqlplus tee相关问题.txt
--//http://blog.itpub.net/267265/viewspace-2375436/=>[20190110]rlwrap sqlplus tee相关问题3.txt
SCOTT@book> set describe DEPTH 2 LINENUM ON INDENT ON
SCOTT@book> set colsep |
--//目的就是desc前面输出有行号,可以标识那个字段显示位置。
--//建立一个脚本:
$ cat prp.sql
spool /tmp/oop.pipe
@ prxx
spool off
--//window 1:
$ tail -n 2000 -f /tmp/oop.pipe
--//注意先执行以上这步,不然下面spool /tmp/oop.pipe 时挂住。
--//window 2:
SCOTT@book> select * from v$database;
SCOTT@book> @ prp
--//window 1:
--//按ctrl+c中断,然后打入如下,然后在windows 2执行 @ prp就ok了。
$ tail -n 2000 -f /tmp/oop.pipe | grep -n SUPP
33:SUPPLEMENTAL_LOG_DATA_MIN : NO
34:SUPPLEMENTAL_LOG_DATA_PK : NO
35:SUPPLEMENTAL_LOG_DATA_UI : NO
43:SUPPLEMENTAL_LOG_DATA_FK : NO
44:SUPPLEMENTAL_LOG_DATA_ALL : NO
54:SUPPLEMENTAL_LOG_DATA_PL : NO
--//减去3对应字段序号。
--//window 2:
SCOTT@book> set colsep |
SCOTT@book> set linesize 20000
SCOTT@book> @ desc v$database
...
11 CONTROLFILE_TYPE VARCHAR2(7)
12 CONTROLFILE_CREATED DATE
13 CONTROLFILE_SEQUENCE# NUMBER
14 CONTROLFILE_CHANGE# NUMBER
15 CONTROLFILE_TIME DATE
....
--//window 1:
--//修改如下:
$ tail -n 2000 -f /tmp/oop.pipe | cut -d"|" -f11,12,13,14,15
SCOTT@book> select * from v$database;
CONTROL|CONTROLFILE_CREATED|CONTROLFILE_SEQUENCE#|CONTROLFILE_CHANGE#|CONTROLFILE_TIME
-------|-------------------|---------------------|-------------------|-------------------
CURRENT|2015-11-24 09:11:10| 54493| 13382769951|2021-11-08 16:22:44
--//window 2:
spool /tmp/oop.pipe
select * from v$database;
spool off
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2841205/ ,如需转载,请注明出处,否则将追究法律责任。