您的位置:首页 > 数据库

SQL*LOAD 数据文件与目标表数目不一致加载

2016-03-21 09:57 357 查看
本节所讲的数据文件与目标表数目不一致指2种情况:第一种,多个数据文件加载到单个目标表中;第二种,单个数据文件加载多个目标表中。

1.多个数据文件加载到单个目标表中

下面就将数据文件test06.dat、test07.dat、test08.dat加载到LoadTest表为例,数据文件内容分别如下:

数据文件test06.dat如下:

45,data,update
46,clicl,insert
47,wang,replace
48,sing,insert

数据文件test07.dat如下:

51,fgu,update
52,kll,insert


数据文件test08.dat如下:

53,fgfh,update
54,tt,insert
55,gg,replace

对应该数据文件的控制文件test06.ctl如下:

LOAD DATA
INFILE test06.dat
INFILE test07.dat
INFILE test08.dat
DISCARDFILE 'test06.dsc'
TRUNCATE
INTO TABLE LOADTEST
FIELDS TERMINATED BY","
(LOADID, OPERNAME,OPERTYPE)

运行SQL*Loader,加载数据,

[oracle@nn ~]$ sqlldr nn/123 control=/home/oracle/test06.ctl



通过SQL*Plus查询加载结果:

SQL> SELECT t.* FROM loadtest t;



2.单个数据文件加载多个目标表中

比如,将数据文件test09.dat中OPERTYPE字段值为“insert”的数据导入到LOADIN表中,字段值为“update”的数据导入到LOADUP表中。

数据文件test09.dat如下:

1,data,update
2,,insert
3,yju,replace
4,sing,insert
5,hyui,update
6,clicl,insert
7,gg,replace
8,dfh,insert

对应该数据文件的控制文件test09.ctl如下:

LOAD DATA
INFILE test09.dat
DISCARDFILE 'test09.dsc'
TRUNCATE
INTO TABLE LOADIN WHEN OPERTYPE='insert'
FIELDS TERMINATED BY","
TRAILING NULLCOLS
(LOADID, OPERNAME,OPERTYPE)
INTO TABLE LOADUP WHEN OPERTYPE='update'
FIELDS TERMINATED BY","
(LOADID POSITION(1), OPERNAME POSITION(3:6),OPERTYPE POSITION(8:14))

注意:同一个文件导入到2张以上表的情况,when后面必须要个POSITION,否则第2张表加载不了。

运行SQL*Loader,加载数据,

[oracle@nn ~]$ sqlldr nn/123 control=/home/oracle/test09.ctl



通过SQL*Plus查询加载结果,可见OPERTYPE字段值为“insert”的数据导入到LOADIN表中,字段值为“update”的数据导入到LOADUP表中,其他的数据存入了test09.dsc文件中。

SQL> SELECT t.* FROM loadin t;

SQL> SELECT t.* FROM loadup t;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 11g SQLLOADER