SQLLoader 使用小结(2)

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

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值