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

来源:互联网 发布:陕西千秋网络好不好 编辑:程序博客网 时间:2024/05/21 23:02

本节所讲的数据文件与目标表数目不一致指2种情况:第一种,多个数据文件加载到单个目标表中;第二种,单个数据文件加载多个目标表中。

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

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

数据文件test06.dat如下:

45,data,update46,clicl,insert47,wang,replace48,sing,insert

数据文件test07.dat如下:

51,fgu,update52,kll,insert

数据文件test08.dat如下:

53,fgfh,update54,tt,insert55,gg,replace

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

LOAD DATA INFILE test06.datINFILE test07.datINFILE test08.datDISCARDFILE 'test06.dsc'TRUNCATEINTO TABLE LOADTESTFIELDS 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.datOPERTYPE字段值为“insert”的数据导入到LOADIN表中,字段值为“update”的数据导入到LOADUP表中。

数据文件test09.dat如下:

1,data,update2,,insert3,yju,replace4,sing,insert5,hyui,update6,clicl,insert7,gg,replace8,dfh,insert

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

LOAD DATA INFILE test09.datDISCARDFILE 'test09.dsc'TRUNCATEINTO 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;





0 0