在Oracle SQL Plus中抑制SQL命令的输出

需求

在SQL Plus中执行SQL命令时,有时我们只需要统计时间和其它一些关键信息,不需要显示结果集。因为有时结果集成百上千行,反而会干扰我们的分析。

方法1: SET TERM[OUT] OFF

其帮助见这里。

Controls the display of output generated by commands in a script that is executed with @, @@ or START. OFF suppresses the display so that you can spool output to a file without displaying the output on screen. ON displays the output on screen. TERMOUT OFF does not affect output from commands you enter interactively or redirect to SQL*Plus from the operating system.

控制使用 @、@@ 或 START 执行的脚本中的命令生成的输出的显示。 OFF 抑制显示,以便您可以将输出假脱机到文件,而不在屏幕上显示输出。 ON 在屏幕上显示输出。 TERMOUT OFF 不会影响您以交互方式输入的命令的输出或从操作系统重定向到 SQL*Plus。

注意,TERMOUT OFF 不会影响您以交互方式输入的命令的输出或从操作系统重定向到 SQL*Plus。例如:

SQL> show term
termout ON
SQL> set term off
SQL> select * from regions;

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

假设我们有文件1.sql如下:

-- 1.sql
select * from regions;

以下执行不会显示输出:

SQL> set termout off
SQL> @1.sql
SQL>

正确的用法如下:

SQL> set term off
SQL> spool 1.out
SQL> @1.sql
SQL> spool off
SQL> exit

此时虽然终端没有输出,但是在输出文件中是有的:

$ cat 1.out
SQL> @1.sql

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

SQL> spool off

方法2:SET FEED[BACK] ONLY

此命令的帮助见这里。

ONLY returns the number of rows selected by a query without displaying data.

ONLY 仅返回查询选择的行数而不显示数据。

这个用户简单直接,非常适用我的需求。例如:

SQL> set feed only
SQL> set timing on
SQL> select * from regions;

5 rows selected.

Elapsed: 00:00:00.00

SET FEED 还有很多其他有用的用法,这里顺带介绍下。

ON or OFF turns this display on or off. Turning feedback ON sets n to 1. Setting feedback to zero is equivalent to turning it OFF. The feedback message is not displayed while the data is displayed.

SET FEEDBACK OFF also turns off the statement confirmation messages such as ‘Table created’ and ‘PL/SQL procedure successfully completed’ that are displayed after successful SQL or PL/SQL statements.

SQL_ID returns the sql_id for the SQL or PL/SQL statements that are executed. The sql_id will be assigned to the predefined variable _SQL_ID. You can use this predefined variable to debug the SQL statement that was executed. The variable can be used like any other predefined variable, such as _USER and _DATE.

ON 或OFF 打开或关闭该显示。 打开反馈会将 n 设置为 1。将反馈设置为零相当于将其关闭。 显示数据时不显示反馈消息。

SET FEEDBACK OFF 还会关闭在成功执行 SQL 或 PL/SQL 语句后显示的语句确认消息,例如“表已创建”和“PL/SQL 过程已成功完成”。

SQL_ID 返回所执行的 SQL 或 PL/SQL 语句的 sql_id。 sql_id 将分配给预定义变量 _SQL_ID。 您可以使用此预定义变量来调试已执行的 SQL 语句。 该变量可以像任何其他预定义变量一样使用,例如 _USER 和 _DATE。

来看一下各种设置:

SQL> show feed
FEEDBACK ON for 6 or more rows SQL_ID OFF

SQL> set feed on
SQL> show feed
FEEDBACK ON for 1 or more rows SQL_ID OFF

SQL> set feed off
SQL> show feed
feedback OFF SQL_ID OFF

SQL> set feed on sql_id
SQL> show feed
FEEDBACK ON for 1 or more rows SQL_ID ON

SQL> set feed on
SQL> show feed
FEEDBACK ON for 1 or more rows SQL_ID OFF

这里有个小技巧,就是如果你想关掉SQL_ID,只需要重新发一条不带SQL_ID的命令即即可。

以下是一个实际的例子:

SQL> select * from regions;

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

SQL>
SQL> set feed on
SQL> select * from regions;

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

5 rows selected.

SQL> set feed on sql_id
SQL> select * from regions;

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

5 rows selected.

SQL_ID: b0r80srx88x6v
SQL> set feed off
SQL> select * from regions;

 REGION_ID REGION_NAME
---------- -------------------------
        10 Europe
        20 Americas
        30 Asia
        40 Oceania
        50 Africa

你可能感兴趣的:(Oracle数据库管理,Oracle数据库开发,oracle,sql,database,sqlplus,feedback)