水煮Oracle35----關於Oracle的sql*loader多表載入的容易忽略的position問題

1向2飛發表於2014-02-14

       一個簡單控制檔案的編寫:

--fields terminated by ',' enclosed by '"' ---如果資料的所有終止符號一樣,設定預設終止符:whitespace(空格、tab、換行、換頁、回車)/'string'
--badfile ---是指給的外部檔案中不符合終止要求,不入庫的資料
--discardfile---是指由when條件過濾掉的資料
--replace(先做delete,然後插入新行)、append(追加新行)、truncate(刪除資料,然後替換)、insert
--when ---條件過濾
--trailing nullcols ---資料檔案中沒有,但是控制檔案中有的列,這些列通過該語句置null
--nullif 條件、defaultif 條件
--begindata ---資料在控制檔案中
--filler:過濾欄位,不必在表中出現,主要用於when條件過濾,注意filler在position關鍵字前邊
--注意:sqlloader讀取平面檔案中的資料是按照行讀取的,即便是到下張表,也一直是按照行來讀取的,所以position應用就急為重要在多表載入中
Options(direct=ture)
Load data
infile 'D:\sqlloader\b.csv' badfile 'D:\sqlloader\b.bad' discardfile 'D:\sqlloader\b.dsc'
Append
into table a1
when rowsid='1'
trailing nullcols
(
  rowsid filler char terminated by ',',
  sex  char  terminated by ',',
  Name char  terminated by ',')
into table a2
when rowsid='2'
trailing nullcols
(
  rowsid filler position(1) char terminated by ',',
  sex1  char  terminated by ',',
  Name1 char  terminated by ','
    )
into table a3
when rowsid='3'
trailing nullcols
(
  rowsid filler position(1)  char terminated by ',',
  sex  char  terminated by ',',
  Name char  terminated by ','
    )
 ------------------------------------------------------------------------------------
 The POSITION parameter in the second INTO TABLE clause is necessary to load this data correctly.
 It causes field scanning to start over at column 1 when checking for data that matches the second format.
 Without it, SQL*Loader would look for the recid field after dname.(摘之Oracle聯機文件)
 ------------------------------------------------------------------------------------

 

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

相關文章