在對數據文件進行導入的時候,可能會遇到文件比較特殊的情況(實驗所用表還是上篇文章的FRUITMARKET)
1. 如果要導入的文件中包含雙引號
1,Apple,¥4.00,"A_3"
2,Pear,¥3.00,"B_2"
3,Grape,¥6.00,"C_5"
4,Banana,¥6.00,"D_2"
?? ? fruit2.dat?
如果不想再數據庫中存放這些雙引號,就要加入OPTIONALLY ENCLOSED BY ?' " ' 語句
編寫控制文件
LOAD DATA INFILE fruit2.dat TRUNCATE INTO TABLE FRUITMARKET FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' (FID,FNAME,PRICE,ADDRESS)
?
??fruit2.ctl
執行SQLLDR命令SQLLDR SCOTT/tiger ?CONTROL=fruit2.ctl
(不知道怎么回事在10g中¥符號不能被正常識別,這問題以后再說,大家可以注意一下數據文件中的雙引號已經被過濾掉了)
2. 導入的數據文件沒有明顯的分隔符
1 Apple ¥3.00 A_3 2 Pear ¥2.00 B_2 3 Grape ¥4.00 C_5 4 Banana ¥6.00 D_2
?
?fruit3.dat?
編寫控制文件
LOAD DATA INFILE fruit3.dat TRUNCATE INTO TABLE FRUITMARKET ( FID position(1), FNAME position(7:12), PRICE position(17:21), ADDRESS position(28:32) )
?
fruit3.ctl
這里position的位置是告訴SQLLDR,從哪到哪是一個字段,也就是指出字段的開始和結束位置,比較麻煩的就是還要數出空格的數量
結果:
?
?
也可以在position語句中使用*,將上述的控制文件等價代換
LOAD DATA INFILE fruit3.dat TRUNCATE INTO TABLE FRUITMARKET ( ?FID position(1), ?FNAME position(*+5:12), ?PRICE position(*+4:21), ?ADDRESS position(*+6:32) ) ?
?*代表了上一個字段的結束位置加一,比如第二行的*就代表了1+1=2,也就是 2+5:12
?
3.還是這個例子,如果要將fruit的數據導入fruitmarket表中的時候還不知道fruit的address怎么辦
1 Apple $3.00 2 Pear $2.00 3 Grape $4.00 4 Banana $6.00
??編寫控制文件
LOAD DATA INFILE fruit4.dat TRUNCATE INTO TABLE FRUITMARKET ( FID position(1), FNAME position(7:12), PRICE position(17:21), ADDRESS "NULL" )
?
?此時可以暫時將ADDRESS值設為NULL,在這個位置0也是允許的值,不過在這里ADDRESS設為0會有點奇怪
結果:
4. 如果數據文件中有多余數據的情況
1 Apple $3.00 zhangsan A_3 2 Pear $2.00 lisi B_2 3 Grape $4.00 zhangsan C_5 4 Banana $6.00 lisi D_2
(在編輯器中后面的字符沒法對齊,但是正式導入的時候最好要對齊,否則會加大工作量)
fruit5.dat?
編寫控制文件:
?
?
LOAD DATA INFILE fruit5.dat TRUNCATE INTO TABLE FRUITMARKET ( FID position(1), FNAME position(7:12), PRICE position(17:21), ADDRESS position(39:41) )
?
?
?只要這樣指定字段的長度就可以了
?還有要注意一點就是如果在有分隔符的情況下存在多余的數據
?
1,Apple,$3.00,zhangsan, A_3 2,Pear,$2.00,lisi,B_2 3,Grape,$4.00,zhangsan,C_5 4,Banana,$6.00,lisi,D_2
?
?那么就要修改控制文件
LOAD DATA INFILE fruit5.dat TRUNCATE INTO TABLE FRUITMARKET FIELDS TERMINATED BY "," ( FID,FNAME,PRICE,FILLER,ADDRESS )
?
?用FILLER關鍵字來過濾掉不需要的字段
?
?
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
