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;





發佈了35 篇原創文章 · 獲贊 4 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章