需求

在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 termtermout ONSQL> set term offSQL> select * from regions; REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 Africa

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

-- 1.sqlselect * from regions;

以下执行不会显示输出:

SQL> set termout offSQL> @1.sqlSQL>

正确的用法如下:

SQL> set term offSQL> spool 1.outSQL> @1.sqlSQL> spool offSQL> exit

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

$ cat 1.outSQL> @1.sql REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 AfricaSQL> spool off

方法2:SET FEED[BACK] ONLY

此命令的帮助见这里。

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

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

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

SQL> set feed onlySQL> set timing onSQL> 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 feedFEEDBACK ON for 6 or more rows SQL_ID OFFSQL> set feed onSQL> show feedFEEDBACK ON for 1 or more rows SQL_ID OFFSQL> set feed offSQL> show feedfeedback OFF SQL_ID OFFSQL> set feed on sql_idSQL> show feedFEEDBACK ON for 1 or more rows SQL_ID ONSQL> set feed onSQL> show feedFEEDBACK ON for 1 or more rows SQL_ID OFF

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

以下是一个实际的例子:

SQL> select * from regions; REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 AfricaSQL>SQL> set feed onSQL> select * from regions; REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 Africa5 rows selected.SQL> set feed on sql_idSQL> select * from regions; REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 Africa5 rows selected.SQL_ID: b0r80srx88x6vSQL> set feed offSQL> select * from regions; REGION_ID REGION_NAME---------- -------------------------10 Europe20 Americas30 Asia40 Oceania50 Africa