引言
在项目中,我们经常会遇到数据的卸载、装载需求。
卸载就是需要将数据从数据库中导入到文本文件中的需求,这样的方法有很多,比较常用的就是spool命令。
装载就是需要将数据从文本文件中导入到数据库中。方法也有很多,常用的方法为:sqlldr。关于sqlldr,详见博客:《数据装载--sqlldr的使用》
下面介绍下spool的使用。
一、示例:
spool:是sqlplus的命令。它允许你把一句或者多句sql语句输出保存为文件格式。
SQL> spool d:\test1.txt
SQL> select userid,username,email from test;
SQL> spool off
查看文件test1.txt,数据导入文件成功。如果在spool后面的输出文件名那一栏不指定路径的话,默认在登陆用户的home目录下。
二、spool的语法格式:
spool { file_name[.ext] [create|replace|append]| off | out }
file_name:指定输出的文件名。默认的文件扩展名是.lst。
create:创建一个新的文件。
replace:默认使用该项.覆盖原有文件中的内容,如果原文件不存在则,新建一个输出文件。
append:把输出内容追加到指定的文件中。
off:停止输出。
out:停止输出,并发送到默认的打印机,该命令在有些操作系统上面不可用。
三、spool设置
示例一只是非常简单的使用了spool命令,但是对于sql的格式和输出文件的格式,最好自己定义好,否则出错概率非常大。
spool常用的设置
set colsep' '; //域输出分隔符
set echo off; //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off; //回显本次sql命令处理的记录条数,缺省为on
set heading off; //输出域标题,缺省为on
set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off; //显示脚本中的命令的执行结果,缺省为on
set trimout on; //去除标准输出每行的拖尾空格,缺省为off
set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
导出文本数据的建议格式:
SQL*PLUS环境设置
SET NEWPAGE NONE
SET HEADING OFF
SET SPACE 0
SET PAGESIZE 0
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 2500
对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本文件。通常情况下,我们使用如下:
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool 路径+文件名
select col1||','||col2||','||col3||','||col4||'..' from tablename;
spool off
示例一优化为:
SQL> set trimspool on
SQL> set linesize 120
SQL> set pagesize 2000
SQL> set newpage 1
SQL> set term off
SQL> spool d:\test2.txt
SQL> select userid||','||username||','||email||',,' from test;
SQL> spool off
查看test2.txt为:
SQL> select userid||','||username||','||email||',,' from test;
USERID||','||USERNAME||','||EMAIL||',,'
------------------------------------------------------------------------------------------------------------------------
a001,zhangsan,zhangsan@163.com,,
a002,lisi,lisi@163.com,,
a003,wangwu,wangwu@163.com,,
SQL> spool off