ITPub博客

首页 > 数据库 > Oracle > [20210419]避免冗余的输出.txt

[20210419]避免冗余的输出.txt

原创 Oracle 作者:lfree 时间:2021-04-20 11:08:31 0 删除 编辑

[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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    3455
  • 访问量
    7145191