第一步:寫一個 ctl格式的控制文件
CTL 控制文件的內容 :
load data --1. 控制文件標識
infile'xxx.txt' --2. 要導入的數據文件名
insert into table test--3. 將文件插入到數據庫的 test 表中
fields terminated by X'09' --4. 用于分割一行中各個屬性值的符號(例如每個屬性值用逗號 分割 , 那么就把 X'09'改為 ‘ ,’)
(id , username ,passwprd ,......) --5. test表中對應的屬性名
load data
infile 'E:/user_data_one_week/zhejiang_user_data.log'insert into table day_data
fields terminated by '|'
trailing nullcols
--(數據中某些屬性可能是 null 值 , 如果不加入這行導入到數據庫的時候就會自動跳過null值的列, 這樣數據插入后就會屬性和值對應不上)
(time,
user_id,
type,
longitude,
latitude,
height,
content char(10000))
補充幾點 .
1. 我在第三步中運用了 insert into ?table還有以下幾個值
a.insert ?為缺省方式,插入表中時要求表為空 ,不然會報錯
b.append , 在表中追加新紀錄 , 所以表不為空插入的時候也不會報錯
c.replace , 刪除舊記錄 , 替換成新裝載的記錄 (明明我應該用這種方法 , 但是我對 insert情有獨鐘 ,好吧,我是導入完才看到有這個的)
d .reuncate ?同上 ?(也同上沒用過 )
2.表中屬性 content 的問題 ?-- ?CLOB 類型插入問題
當使用sqlldr加載很長的字符串(超過4000)到表中的clob類型中時,老是報錯: 數據文件的字段超出最大長度.查找相關資料后得知,sqlldr每次讀入文件中數據流的數據類型默認為CHAR ,長度為 255 .所以只要超過255字符的段都會報這個錯.解決方法很簡單,在控制文件中字段后添加上char(1000000),例如:
LOAD DATA
INFILE *
INTO TABLE DEMO
TRUNCATE
FIELDS TERMINATED BY ','
(d1 ,
d2 char(1000000)
)
其中表demo的列d2是clob類型,當然1000000只是隨便用的一個大數字,只要保證加載的長度不超這個數字就成
第二步 : ?在 cmd 命令窗口中寫入導入語句
-> ?sqlldr ?userid = 用戶名 / 密碼 @ 數據庫名 ? ?control = 之前寫的ctl控制文件的地址 ? ? bad = E:/ bad.bad ? ?log = E:/log.log
-> ?sqlldr ?userid = everyday/123456@orcl ? control = E:/data.ctl ? bad=E:/bad.bad ? log = E:/ log.log
oracle? sqlldr導入文件只需要兩步
1. ?寫CTL 控制文件
2 .?在cmd 命令窗口中寫入導入語句