SQL LOADER

jst143發表於2010-12-23

資料匯入

1.控制檔案內容如下:
(1) LOAD DATA
(2) INFILE *
(3) INTO TABLE DEPT  [INSERT|TRUNCATE|APPEND|REPLACE|]
(4) FIELDS TERMINATED BY ','  [WHITESPACE]  [OPTIONALLY ENCLOSED BY '"']      [TRAILING NULLCOLS]
      fields terminated by X'09'    --以X'09'為分隔符,是一個製表符(TAB) 其它還有X'07'
(5) (DEPTNO, DNAME, LOC ) [filler] [ position(1:2)] [column date 'yyyymmdd'] [column char (255)]
(6) BEGINDATA
(7) 10,Sales,Virginia
(8) 20,Accounting,Virginia
(9) 30,Consulting,Virginia
(10) 40,Finance,Virginia

         LOAD DATA (1):這會告訴SQLLDR要做什麼(在這個例子中,則指示要載入資料)。SQLLDR還可以執行CONTINUE_LOAD,也就是繼續載入。只有在繼續一個多表直接路徑載入時才能使用後面這個選項。
         INFILE * (2):這會告訴SQLLDR所要載入的資料實際上包含在控制檔案本身上,如第6~10行所示。也可以指定包含資料的另一個檔案的檔名。如果願意,可以使用一個命令列引數覆蓋這個INFILE語句。要當心,命令列選項總會涵蓋控制檔案設定。
         INTO TABLE DEPT (3):這會告訴SQLLDR要把資料載入到哪個表中(在這個例子中,資料要載入到DEPT表中)。
         FIELDS TERMINATED BY ‘,’(4):這會告訴SQLLDR資料的形式應該是用逗號分隔的值。為SQLLDR描述輸入資料的方式有數十種;這只是其中較為常用的方法之一。
         (DEPTNO, DNAME, LOC) (5):這會告訴SQLLDR所要載入的列、這些列在輸入資料中的順序以及資料型別。這是指輸入流中資料的資料型別,而不是資料庫中的資料型別。在這個例子中,列的資料型別預設為CHAR(255),這已經足夠了。

         預設的載入選項是INSERT(而不是APPEND、TRUNCATE或REPLACE)。要執行INSERT, SQLLDR就認為表為空。如果想向DEPT表中增加記錄,可以指定載入選項為APPEND;或者,為了替換DEPT表中的資料,可以使用REPLACE或TRUNCATE。REPLACE使用一種傳統DELETE語句;因此,如果要載入的表中已經包含許多記錄,這個操作可能執行得很慢。TRUNCATE則不同,它使用 TRUNCATE SQL命令,通常會更快地執行,因為它不必物理地刪除每一行。但是TRUNCATE 不能回退。
         OPTIONALLY ENCLOSED BY '"' 指部分欄位可以用雙引號包起來。
         TERMINATED BY WHITESPACE會解析這個串,查詢空白符(製表符、空格和換行符)的第一次出現,然後繼續查詢,直至找到下一個非空白符。
         載入這樣的定界資料時,很可能想逃過輸入記錄中的某些列。例如,你可能載入欄位1、3和5,而跳過第2列和第4列。為此,SQLLDR提供了FILLER關鍵字。這允許你對映一個輸入記錄中的一列,但不把它放在資料庫中。
         通常會有一個有某個外部系統生成的平面檔案,而且這是一個定長檔案,其中包含著固定位置的資料(positional data)。不用使用FIELDS TERMINATED BY子句。
         TRAILING NULLCOLS 如果輸入記錄中不存在某一列的資料,SQLLDR就會為該列繫結一個NULL值。
         [column date 'yyyymmdd'] 控制檔案中使用DATE資料型別,並指定要使用的日期掩碼。這個日期掩碼與資料庫中TO_CHAR和TO_DATE中使用的日期掩碼是一樣的。
         [column char (255)]預設的輸入欄位長度為255字元。如果你的欄位比這要長,就會將收到一個錯誤訊息,這並不是說這個資料無法放在資料庫列中;而是說,它指示SQLLDR希望有不少或等於255位元組的輸入資料,不過稍多一些也會接收。對此解決方案很簡單,只需在控制檔案中使用CHAR(N),在此N要足夠大,能容納輸入檔案中最長的欄位長度。
         SQLLDR的許多選項既可以放在控制檔案中,也可以在命令列上使用。例如,可以使用INFILE FILENAME,也可以使用SQLLDR…DATA=FILENAME。命令列會覆蓋控制檔案中的任何選項。不能指望一定會使用控制檔案中的選項,因為執行SQLLDR的人可能會通過命令列覆蓋這些選項。
       
2.ctl檔案範例
Load data
infile 'e:\l\data.txt'
into table t1
fields terminated by '|'
TRAILING NULLCOLS
(
C1 char(400),
C2 date 'yyyymmdd'
)

3.相關命令
在NT下,SQL*LOADER的命令為SQLLDR,在UNIX下一般為sqlldr/sqlload
F:\oracle>SQLLDR SCOTT/TIGER CONTROL=TEST.CTL

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23577591/viewspace-682502/,如需轉載,請註明出處,否則將追究法律責任。

相關文章