在Oracle SQL * Plus中,如何关闭输出(到终端)?
这适用于交互模式,而不是运行脚本。
示例:
{{1}}
主要在Windows上寻找解决方案,Oracle DB版本11.2。
答案 0 :(得分:1)
set autotrace traceonly
查询仍然运行。结果将发送到客户端,但不会显示。但是会显示计划和统计数据。统计信息需要访问某些v$
次观看。要在没有统计信息的情况下运行set autotrace traceonly explain
。
答案 1 :(得分:0)
你真的不能;可能有用的选项(例如set termout off
,您可能已经熟悉)仅在运行脚本时适用。
我不确定它对print
命令是否真的有意义,但是如果你真的想要运行查询而不看输出就可以把它放在PL / SQL块中:
SQL> set feedback off
SQL> set timing on
2 begin
3 for r in (select 1 from dual) loop
4 null;
5 end loop;
6 end;
7 /
Elapsed: 00:00:00.00
SQL>
需要null;
,因为你必须在循环中做一些事情。编译器没有优化它 - 它仍然执行查询并检索结果,至少据我所知;像select table_name from all_tables
这样稍微有用的查询会占用非零时间 - 在我的系统上为1.45秒。
如果你想计算print
次提取的时间,你可以循环一个引用游标结果:
SQL> var c refcursor
2 begin
3 open :c for select table_name from all_tables;
4 end;
5 /
Elapsed: 00:00:00.17
SQL> declare
2 t all_tables.table_name%type;
3 begin
4 loop
5 fetch :c into t;
6 exit when :c%notfound;
7 end loop;
8 close :c;
9 end;
10 /
Elapsed: 00:00:00.10
答案 2 :(得分:0)
我使用了这样的脚本(在我通过@执行的文件中):
var c refcursor
set timi on
exec proc1(:c);
set feedback off
set timi off
exec DBMS_OUTPUT.PUT_LINE(' before PRINT ' || systimestamp);
set termout off
print
set termout on
exec DBMS_OUTPUT.PUT_LINE(' after PRINT ' || systimestamp);
set feedback on
set timi on
rollback;
exit
设置termout off 也会抑制时序输出,所以我添加了PUT_LINE(也可以使用从双中选择systimestamp)。 我想没有简短而优雅的解决方案。