spool是Oracle SQL*PLUS下的命令,可以用它来导出表中的大量数据,生成格式可以由自己手动控制。因工作需要将Oracle下的某张表的数据迁移到MySQL下,所以学习了下spool的用法,下面就一个小例子:“导出scott用户的dept表”来讲解spool这个命令。
1. 编写spool.sql脚本,存放在d盘根目录下
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
set echo off
set feedback off
spool d:\\data.txt
select deptno || ',' || dname || ',' || loc from dept;
spool off
2. 在sql*plus上用scott用户登录,执行上面的sql脚本
@d:\spool.sql
3.观察d盘根目录,生成了data.txt文件,txt中的内容如下:
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
总结:
利用spool可以方便地导出所需要的表,进而可以利用导出的数据进行不同数据库间的数据迁移。下面介绍使用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(可以缩写为term)
set trimout on; //去除标准输出每行的拖尾空格,缺省为off
set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
注意:
如果直接在sql*plus中执行上面的spool.sql命令,而不通过执行脚本来进行,那么在生成的txt文件中会存在执行的sql语句。