oracle sql loader & spool

今天在做一个需求的时候用到了sqlldr,觉得挺强大的,研究了一下,把总结的东西列出来.

oracle 数据的导入用sql loader, 导出用spool . 这个不同于exp/imp. 用sqlldr/spool时候,数据是可以真真正正看到的即可读的,而不是二进制的即不可读的. 下面说一下导出.

1. 导出 spool
    一直在用spool, 但是都是用来纪录一个sql script运行的结果的,没有作为一个为导入准备文件的工具。如何来生成导入数据文件呢?

set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on
spool inputfile.txt

select col1 || ‘;’ || col2 || ‘;’ || col3 ||’;’
from tab1
where col2 = ‘XYZ’;

spool off

其中set参数有很多哦..如下:
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

听说还可以用另外,也可以使用使用 UTL_FILE PL/SQL 来生成input file, 但是没有尝试过.

2. 导入 sqlldr
2-1. datatype
sqlldr有三种datatype,
CHAR
DECIMAL EXTERNAL
INTEGER EXTERNAL

2-2. 导入模式
insert: default value,在数据装载开始时要求表为空,所以一般会先truncate table.
append: 在表尾追加新记录
replace: 替换原来的数据,也就是在insert之前自动作一个truncate.
truncate: 和Replace 同

2-3. control file
个人觉得control file是sqlldr中最为重要的一个文件, 所以写control file很重要, 它的参数很多,就不一一列举, 只用了几个最为简单的. 下面是一个例子:
————————–
load data
infile table_name.txt
into table table_name
fields terminated by “;”
trailing nullcols
( col1 DATE “DD/MM/YY”,
  col2,
  col3  INTEGER EXTERNAL,
  col4,
  col5
)
————————–

注意: 有时候用infile * ,这是指数据就在control file里面, 没有用到txt文件来做为输入.

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>