本節所講的數據文件與目標表數目不一致指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;