ITPub博客

首页 > 数据库 > Oracle > 【SQL*Plus】SPOOL到文件且在屏幕上打印SPOOL输出信息

【SQL*Plus】SPOOL到文件且在屏幕上打印SPOOL输出信息

原创 Oracle 作者:OCMU联盟 时间:2009-10-17 16:50:44 0 删除 编辑
如果您经常在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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8407016