[20211108]sqlplus管道过滤.txt

来源:这里教程网 时间:2026-03-03 17:08:33 作者:

[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

相关推荐