--sql*plus-5
=========
【5】设置输出内容的相关命令
1. 将显示的内容输出到指定文件
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。

2. 关闭spool输出
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
备注:在实用SPOOL输出内容到本地文件时,需注意编码格式,否则会出现乱码的问题

3.是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息
SQL> SET SERVEROUT[PUT] {ON|OFF}

4.是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
SQL> SET TERM[OUT] {ON|OFF}
用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间。
设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
备注:和Set serveroutput on不同, 这个命令用于设置SQL执行结果是否显示,前者是用于设置存储过程的

5.将SPOOL输出中每行后面多余的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF}


6.将指定的信息或一个空行输出到屏幕上
PROMPT [text]
备注:该命令在输出提示、警告信息经常使用
set echo off --关闭脚本中正在执行的SQL语句的显示
set feedback off --关闭当前sql语句查询或修改的行数的显示
set verify off
set term off --关闭屏幕上输出内容的显示
set trimspool on --将每行后面多余的空格去掉
set linesize 200 --设置每行最多显示200个字符
set pagesize 999 --设置每页最多显示999行记录
--set newpage none --设置页与页之间的分隔
set heading off --关闭标题的输出

spool d:\peng\database\oracle\tables.xls
@d:\peng\database\oracle\get_table.sql
spool off --关闭输出
select id || ',' || name || ',' || remark || ',' || reg_date || ',' || salary from testtable;
SQL> @d:\peng\database\oracle\ExpData.sql
SQL>
注意在这里我们看不到任何的输出结果,是因为我们使用了set echo off和set term off两个选项的结果。在大数据量导出的情况下关闭屏幕的输出非常有必要,因为这将大大提高程序执行的效率,否则的话会导致SQL*PLUS不停地刷新屏幕和缓冲区。
其实我们也可以把上述的几个选项写在一块,比如说现在我们要将导出文件改为htm文件格式,我们可以这样写
set term off verify off feedback off pagesize 999 heading on
set markup html on entmap ON spool on preformat off

spool d:\peng\database\oracle\tables.htm
@d:\peng\database\oracle\get_table.sql
spool off
这里我们使用set markup html on来将文件导出成为HTML格式,同时注意导出文件名的后缀要改为.htm。因为采用了HTML表格的形式,所以我们将第二个脚本稍微修改一下
select * from testtable;
导出的最终结果如下:
SQL> @d:\peng\database\oracle\ExpData.sql
SQL>

注意在导出完成后SQL*PLUS的提示符变成了SQL>这是因为我们打开了HTML格式的输出所致(>),如果我们要恢复成默认的提示符格式,只需要再次执行一次:
set markup html off就可以了。
【5】设置输出内容的相关命令
1. 将显示的内容输出到指定文件
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 
2. 关闭spool输出
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
备注:在实用SPOOL输出内容到本地文件时,需注意编码格式,否则会出现乱码的问题
3.是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息
SQL> SET SERVEROUT[PUT] {ON|OFF} 
4.是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
SQL> SET TERM[OUT] {ON|OFF}
用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间。设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
备注:和Set serveroutput on不同, 这个命令用于设置SQL执行结果是否显示,前者是用于设置存储过程的
5.将SPOOL输出中每行后面多余的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF} 

6.将指定的信息或一个空行输出到屏幕上
PROMPT [text]
备注:该命令在输出提示、警告信息经常使用
下面我们使用Spool技术来导出一个表的数据,我们要求做到:
①导出的过程不在SQL*PLUS屏幕上显示
②导出的文本中不含有执行的SQL命令
③导出的文本中不含有字段名
④导出的文本中使用逗号(英文)作为字段的分隔符
⑤导出的文本中每行长200个字符
⑥导出的文本中每页999行
⑦导出的文本中每行后面的空格必须被截取
那么下面我们来看一下应该如何做到,首先创建一个用于导出的sql脚本文件,我们将其命名为ExpData.sql,脚本内容如下所示:
set echo off --关闭脚本中正在执行的SQL语句的显示
set feedback off --关闭当前sql语句查询或修改的行数的显示
set verify off
set term off --关闭屏幕上输出内容的显示
set trimspool on --将每行后面多余的空格去掉
set linesize 200 --设置每行最多显示200个字符
set pagesize 999 --设置每页最多显示999行记录
--set newpage none --设置页与页之间的分隔
set heading off --关闭标题的输出
spool d:\peng\database\oracle\tables.xls
@d:\peng\database\oracle\get_table.sql
spool off --关闭输出
请注意上面的两个地方:set部分和spool部分,前者用于设置导出的文本格式,后者再次执行一个sql脚本:get_table.sql进行导出。下面我们再看另一个脚本get_table.sql:
select id || ',' || name || ',' || remark || ',' || reg_date || ',' || salary from testtable;
这里我们使用了||','||来为每个导出字段添加分隔符:,最后是在SQL*PLUS环境下执行上述的导出脚本
SQL> @d:\peng\database\oracle\ExpData.sql
SQL> 注意在这里我们看不到任何的输出结果,是因为我们使用了set echo off和set term off两个选项的结果。在大数据量导出的情况下关闭屏幕的输出非常有必要,因为这将大大提高程序执行的效率,否则的话会导致SQL*PLUS不停地刷新屏幕和缓冲区。
其实我们也可以把上述的几个选项写在一块,比如说现在我们要将导出文件改为htm文件格式,我们可以这样写
set term off verify off feedback off pagesize 999 heading on
set markup html on entmap ON spool on preformat off
spool d:\peng\database\oracle\tables.htm
@d:\peng\database\oracle\get_table.sql
spool off这里我们使用set markup html on来将文件导出成为HTML格式,同时注意导出文件名的后缀要改为.htm。因为采用了HTML表格的形式,所以我们将第二个脚本稍微修改一下
select * from testtable;导出的最终结果如下:
SQL> @d:\peng\database\oracle\ExpData.sql
SQL> 
注意在导出完成后SQL*PLUS的提示符变成了SQL>这是因为我们打开了HTML格式的输出所致(>),如果我们要恢复成默认的提示符格式,只需要再次执行一次:
set markup html off

浙公网安备 33010602011771号