Oracle SQL Loader
时间:2010-12-17 来源:ank
SQL Loader
方式一:控制文件,数据在文件控制文件之外
1>控制文件
load data --控制文件标识
INFILE '/u02/sqlloader/test.dat' --要输入的数据文件名为test.dat
append
into table tb --向表tb中追加记录
fields terminated by ',' --字段终止于',',
--fields terminated by "," optionally enclosed by '"'
--optionally
(
id1,id2
) --定义列对应顺序
注解:
insert,为缺省方式,在数据装载开始时要求表为空
append,在表中追加新记录
replace,删除旧记录,替换成新装载的记录
truncate,同上
2>数据文件
[oracle@node2 sqlloader]$ cat test.dat
1,2
3,4
5,6
7,8
3>数据库上的操作
--在system用户下
SQL> conn system/hellojin
Connected.
--建表
SQL> create table tb(id1 number ,id2 number) ;
Table created.
SQL> select count(*) from tb;
COUNT(*)
----------
0
4>执行
SQL> !
[oracle@node2 ~]$ sqlldr userid=system/hellojin control=/u02/sqlloader/control.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Wed Dec 8 23:53:41 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 5
[oracle@node2 ~]$ exit
exit
SQL> select * from tb;
ID1 ID2
---------- ----------
1 2
3 4
5 6
7 8
方式二:控制文件,数据也在控制文件之内
1>控制文件
LOAD DATA
INFILE *
append
into table tb
fields terminated by ','
(
id1,id2
)
Begindata
1,2
3,4
5,6
7,8
2>执行
[oracle@node2 ~]$ sqlldr userid=system/hellojin control=/u02/sqlloader/control2.ctl
SQL> select * from tb ;
ID1 ID2
---------- ----------
1 2
3 4
5 6
7 8
1 2
3 4
5 6
7 8
8 rows selected.
---------------------------
遇到的问题
1>加载的数据包含分隔符
1optionally enclosed by
2>数据文件没有分隔符
A B C
D E F
--
保存为test.dat
定长字符串
Load data
Infile test.dat
Truncate into table bonus
(
Name1 position(1:5),
Name2 position(7:15),
Name3 position(17:20)
)
3>数据文件中的列比要导入的表中列少
Load data
Infile test.dat
Truncate into table bonus
(
Name1 position(1:5),
Name2 position(7:15),
Name3 position(17:20),
Comm "0" --无数据的列
)
4>数据文件中的列比要导入的表中列多
方式1:
修改数据文件,删除多余的列
方式2:
Load data
Infile test.dat
Truncate into table bonus
(
Name1 position(1:5),
Name2 position(7:15),
Name3 position(17:20),
Tcol filler position(21:28)
)
--控制文件中对列定义时指出filler关键字,可以用来指定过滤列
--相当于8-11之间不导入
--filler 关键字,用来指定过滤列
5>提供多个数据文件,要导入同一张表
提供的数据文件中的数据存放格式必须完全相同
Load data
Infile test1.dat
Infile test2.dat
Infile test3.dat
Infile test4.dat
Truncate into table bonus
(
Id1,
Id2
)
6>同一个数据文件,要导入不同表
load data
Infile test.dat
discardfile discard.dsc
Truncate
Into table bonus when tab='bon'
(
Tab filler position (1:3),
Ename position (5:9)
)
Into table manager
When tab = 'mgr'
(
Table filler position(1:3),
Ename position (4:5)
)
7>数据文件前N行不导入
[oracle@node2 ~]$ sqlldr scott/tiger control=control.ctl skip=3
还有个load参数
8>手工指定的换行符
略
http://blogimg.chinaunix.net/blog/upfile2/101217123134.gif