sqlplus 中的spool命令

一、Spool常用的设置

set arraysize 5000;  //此参数可提高SPOOL卸载的速度,最大可以设置为5000
set autotrace on;    //设置允许对执行的sql进行分析
set colsep ',';   //域输出分隔符
set echo off;    //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;  //回显本次sql命令处理的记录条数,缺省为on,设置显示“已选择XX行”
set heading off;   //输出域标题,字段的名称,缺省为on
SET LINESIZE 2500;   //每行允许的最大字符数,设置大些,免得数据被截断,但不宜过大,太大会大大降低导出的速度(注意必须与trimspool结合使用防止导出的文本有太多的尾部空格)
set newpage 1;       //设置页与页之间的分隔{1|n|NONE};当值为0时在每页开头有一个小的黑方框;当值为n时在页和页之间隔着n个空行;当为none时,会在页和页之间没有任何间隔;
set newp none;       //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的
set num 18;          //设置数字的长度,如果不够大,则用科学记数法显示
set numwidth 12;    //输出number类型域长度,缺省为10
SET NULL text;       //显示时,用text值代替NULL值
set pagesize 2000;  //输出每页行数,页面大小,缺省为24,为了避免分页,可设定为0
set serveroutput on; //设置允许显示输出类似dbms_output;--编写存储过程时,大多会将必要的信息输出;
SET SPACE 0;
set term off;        //不在屏幕上输出执行结果
set termout off;   //显示脚本中的命令的执行结果,缺省为on
set timing on;       //显示每个sql语句花费的执行时间,设置显示“已用时间:XXXX”
set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off
set verify off       //是否显示替代变量被替代前后的语句
SET wrap on;         //输出行长度大于设置行长度时(用set linesize n命令设置);值为on时,多余的字符另起一行显示,否则多余的字符将被切除,不予显示;

sqlplus /nolog <<- EOF
    set linesize 2500
	set pagesize 0
	set heading off
	set feedback off
	set echo off
	set termout off
	set trimout on
	set trimspool on
	SET SQLPROMPT #SQL>
    CONN SECURITY/$securitypassword@$ORACLE_SID
	SPOOL 2-exp.sh
	@@ ./sql/2-gen_exp_security.sql
	SPOOL OFF 
	CONN TRADE/$tradepassword@$ORACLE_SID
	SPOOL 2-exp.sh APPEND
	@@ ./sql/2-gen_exp_trade.sql
	SPOOL OFF 
	CONN INTERFACE/$interfacepassword@$ORACLE_SID
	SPOOL 2-exp.sh APPEND
	@@ ./sql/2-gen_exp_interface.sql
	SPOOL OFF 
	CONN ULOG/$ulogpassword@$ORACLE_SID
	SPOOL 2-exp.sh APPEND
	@@ ./sql/2-gen_exp_ulog.sql
	SPOOL OFF 
	CONN CLEAR/$clearpassword@$ORACLE_SID
	SPOOL 2-exp.sh APPEND
	@@ ./sql/2-gen_exp_clear.sql
	SPOOL OFF 
	
	CONN SECURITY/$securitypassword@$ORACLE_SID
	SPOOL 5-imp.sh
	@@ ./sql/5-gen_imp_security.sql
	SPOOL OFF 
	CONN TRADE/$tradepassword@$ORACLE_SID
	SPOOL 5-imp.sh APPEND
	@@ ./sql/5-gen_imp_trade.sql
	SPOOL OFF 
	CONN INTERFACE/$interfacepassword@$ORACLE_SID
	SPOOL 5-imp.sh APPEND
	@@ ./sql/5-gen_imp_interface.sql
	SPOOL OFF 
	CONN ULOG/$ulogpassword@$ORACLE_SID
	SPOOL 5-imp.sh APPEND
	@@ ./sql/5-gen_imp_ulog.sql
	SPOOL OFF 
	CONN CLEAR/$clearpassword@$ORACLE_SID
	SPOOL 5-imp.sh APPEND
	@@ ./sql/5-gen_imp_clear.sql
    SPOOL OFF  
EOF

1 <<- EOF EOF

在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。
EOF只是一个分界符,当然也可以用abcde替换。
当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
此分界符可以是所定义的任何字符串,其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,完全可以换成abcde之类的字符串,只是一个起始和结束的标志罢了。

2 set linesize 2500

设置每行的字符输出个数为2500,放置换行(缺省为80 )

3 set pagesize 0

禁止分页输出

4 set heading off

禁止输出标题(缺省为on)

5 set feedback off

禁止回显sql命令处理的记录条数(缺省为on)

6 set echo off

不显示脚本中的每个sql 命令(缺省为on)

7 set termout off

禁止屏幕显示脚本中命令的执行结果(缺省为on)
对实际输出文本没有影响

8 set trimout on

去除标准输出每行的行尾空格(缺省为off)

9 set trimspool on

去除spool 输出结果中每行的结尾空格(缺省为off)

10 SET SQLPROMPT #SQL>

去除开头和结尾的sql查询和结束命令

11 SPOOL xxxx.xx APPEND

将内容附加到一个已经存在的文件中

引申

12 set newpage 1

设置页与页之间的分隔{1|n|NONE};当值为0时在每页开头有一个小的黑方框;当值为n时在页和页之间隔着n个空行;当为none时,会在页和页之间没有任何间隔;

13 set colsep |   

域输出分隔符

14 set sqlblankline off|on

off 对SQL语句中的空行不处理
on 会正确处理空行

15 col column_name format a50**

设置column_name为50个字符宽

二、Spool 使用方法

说明:spool不但可以把数据导出到txt,也可以导出到csv等;不但可以导数据,也可以导出字符,拼装成sql文件等
1.采用设置分隔符的方法
说明:设定分隔符后,由sqlplus自己使用设定的分隔符对字段进行分割,这种方法不怎么用,在此不详述。

set colsep '|' --设置|为列分隔符   
set trimspool on   
set linesize 120   
set pagesize 2000   
set newpage 1   
set heading off   
set term off 
set num 18 
set feedback off   
spool e:\temp.txt
select * from tablename;   
spool off

2.采用分隔符并接,手工控制输出格式
说明:最佳方法,该方法可以运用各种oracle函数处理导入时的字符。

set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term OFF
spool e:\fs_temp_tb_cm_serv_20120703.txt
select '地市,县区,用户,时间,流量,费用' form dual;
SELECT a_name||','||replace(replace(replace(b_name,chr(9)),chr(10)),chr(13))||','||replace(c_name,'\"')||','||to_char(create_time,'yyyy-mm-dd hh24:mi:ss')||','||net_flux||','||all_fee FROM temp_ltao10;
spool off

上面from dual语句会被当做表头字段先导出排在第一行
(SPOOL OUT比SPOOL OFF多了一个把文件发送到标准打印输出的动作。记得ItPub论坛上有位大虾总结得更简练“OUT = OFF + PRINT”。)
10g以前的版本,spool会将文件覆盖,10g后,为追加。

3.spool不但可以导出数据,也可以生成sql文件

spool c:\table.sql;   
select 'insert into changetable values('|| id||',',changedate||',',areaid||',',workunit||',',dept||',',post||',',address||',',zip||',',note||',',city||',',province||',',country||',',status||',',lawpeopleid||',',reason||',',feedback||');' from change where lawpeopleid not in (select id from LAWPEOPLE t );  
spool off

猜你喜欢

转载自blog.csdn.net/baiduwenku112/article/details/109802569