如果您经常在SQL*Plus中书写脚本,一定会遇到这样一个场景:使用spool将“使用SQL生成SQL脚本”的内容输出到文件过程中,不想在屏幕上看到输出的SQL脚本信息,而直接可以调用生成的脚本来执行。
如果上面的场景描述,您没有明白是什么意思,那么请看我下面的真实需求演示。
1.数据库日常维护中的一个具体需求
自动完成用户下所有表的分析,执行过程中,屏幕上不显示分析脚本的具体内容,仅显示最后分析语句的执行情况。
2.需求实现
$ cat analyze_user_table.sql
set head off
set feedback off
set linesize 131
set pagesize 0
set termout off
set trimspool on
SET TERMOUT OFF
spool generate_analyze_user_table.sql
SELECT 'analyze table ' || table_name
|| ' compute statistics for table for all indexes for all indexed columns;'
FROM user_tables;
spool off
set feedback on
SET TERMOUT ON
@generate_analyze_user_table.sql
3.上面脚本的使用方法
在SQL*Plus中使用“@”方式引用上面“analyze_user_table.sql”脚本,执行效果如下
sec@asd> @analyze_user_table.sql
Table analyzed.
Table analyzed.
...
4.脚本分析说明
只有你真正的执行了上面的代码,你才能真正体会到其中的变化。
实现需求的的关键体现在“SET TERMOUT OFF”这条语句,该命令的目的是,在执行脚本的过程中不屏显输出内容,但真实的完成脚本的内容。
其他的set命令指示辅助输出,使生成的脚本更加的规范
Oracle官方文档中关于SET TERMOUT的说明摘录在此:SET TERM[OUT] {ON | OFF}
SET TERMOUT is not supported in iSQL*Plus
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 syste
连接:
5.使用“SET TERMOUT OFF”的注意事项
从上面引用的文档描述中可以得到一个注意事项:只有在调用的脚本中使用时,才能达到“屏不显但输出”的效果,如果直接在SQL*Plus中使用,这个参数是不生效的。
验证方法:仅需将上面我编写的小脚本直接拷贝到SQL*Plus中执行便可得到验证。
6.小结
关于SQL*Plus中的很多设置小技巧都非常有趣而且高效。
更多信息可以参考Oracle的官方文档“SET System Variable Summary”
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994001/
,如需转载,请注明出处,否则将追究法律责任。