SQLLoader 使用小结(2)

系统 1698 0

在对数据文件进行导入的时候,可能会遇到文件比较特殊的情况(实验所用表还是上篇文章的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

结果:
SQLLoader 使用小结(2)

(不知道怎么回事在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,从哪到哪是一个字段,也就是指出字段的开始和结束位置,比较麻烦的就是还要数出空格的数量

结果:

 
SQLLoader 使用小结(2)
  也可以在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会有点奇怪

结果:


SQLLoader 使用小结(2)

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关键字来过滤掉不需要的字段

 

 

 

 

 

 

SQLLoader 使用小结(2)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论