sqlplus - 关闭输出(交互式)

时间:2015-11-10 23:19:04

标签: oracle sqlplus

在Oracle SQL * Plus中,如何关闭输出(到终端)?

这适用于交互模式,而不是运行脚本。

示例:

{{1}}

主要在Windows上寻找解决方案,Oracle DB版本11.2。

3 个答案:

答案 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)。 我想没有简短而优雅的解决方案。