首页 > 数据库 > Oracle > [20210419]避免冗余的输出.txt
[20210419]避免冗余的输出.txt
--//别人的问的问题,如何避免调式优化sql语句时大量的输出信息,顺便总结概括几种方法。
1.使用set feedback only:
--//12c R2开始sqlplus可以设置set feedback only。
--//更高的版本还可以显示sql_id. 设置 set feedback only sql_id
--//例子:
SYS@dyhis1> set feedback only sql_id
SYS@dyhis1> select sysdate from dual ;
SYSDATE
-------------------
1 row selected.
SQL_ID: f0wzs9nc663bn
SYS@dyhis1> set head off
SYS@dyhis1> select sysdate from dual ;
1 row selected.
SQL_ID: f0wzs9nc663bn
--//缺点至少12c以上的sqlplus才支持这样的设置。还有就是看执行计划时要切换回来,比较麻烦。
2.使用set termout off以及set termout on。
--//这也是我常用的调式方法,例子:
set termout off
set sqlblanklines on
alter session set current_schema=XXX;
alter session set statistics_level=all;
select sysdate from dual ;
set termout on
--//缺点就是必须将sql语句写在脚本里面才能正常使用,如果你在sqlplus一个一个执行是无效的。
--//通过例子说明:
SCOTT@book> set termout off
SCOTT@book> select sysdate from dual ;
SYSDATE
-------------------
2021-04-19 16:49:56
--//在sqlplus里面直接输入的语句无效。
SCOTT@book> @ dpc '' ''
SCOTT@book> @ dpc '' ''
--//显示执行计划没有输出。
--//还有就是如果执行脚本过程中按ctrl+c终端,必须有意识地输入set termout on打开,有时候在调式时很让人疑惑。
3.在不影响执行计划的情况下修改sql语句。
select * from emp ;
--// 修改如下,主要目的在基本不修改执行计划的修改语句,减少输出信息。
select sum(sal) from emp ;
--//还有就是使用提示MATERIALIZE。
4.编辑脚本例子如下:
@ 10046on 12
begin
for r in ( select * from emp ) loop
null;
end loop;
end;
/
@ 10046off
--//这样方法我基本不用,我开始学习oracle时候见过别人这个用过。
begin
for r in ( &&sql ) loop
null;
end loop;
end;
/
--//缺点是语句必须写在一行。
总结:
--//我现在基本最多的是第2种方法。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2768850/,如需转载,请注明出处,否则将追究法律责任。