Linux:sqlldr命令


第一步:寫一個 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 命令窗口中寫入導入語句   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM