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

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

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

下面就将数据文件test06.dattest07.dattest08.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.datOPERTYPE字段值为“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;





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值