Datingbeatiful n Buns s Buns s Www hsearchssearchasearchc Buns + Buns e Www r Datingbeatiful hsearch W Www w Bare i Www Bsearchn Buns search Bare a Datingbeatiful e Bare t Buns Dsearchti Www gb Www asearchiwhooo+dating+siteu Www awhooo+dating+sitec Www ns Datingbeatiful ; Buns nsearchssearch;显示下一条  |  关闭

Lava Leo's Fantasy

to be continued...

导航

 
 
 
 
 

日志

 
 

[原]一则sqlldr使用tab做字段分隔符引起的bug  

2009-05-01 22:06:32|  分类: [Oracle]SQLLDR/E |  标签: |字号 订阅

sqlldr 的控制文件(ctl)需要指定字段间的分割符。语法如下:

FIELDS TERMINATED BY

当分割符为tab时,可能会出现意想不到的结果。

现举例如下:

oracle:10.2.0.1.0

-- 创建测试sqlldr的表

CREATE TABLE test_sqlldr
(
  col1  NUMBER,
  col2  DATE,
  col3  NUMBER,
  col4  NUMBER
)

-- 创建ctl文件

LOAD DATA
INFILE test_sqlldr.dat
TRUNCATE
INTO TABLE scott.test_sqlldr
FIELDS TERMINATED BY '    ' OPTIONALLY ENCLOSED BY '"' -- 分隔符为tab
TRAILING NULLCOLS
(
    col1,
    col2 Date "yyyymmddhh24miss",
    col3,
    col4
)

-- 准备待load的文件,内容如下:

-- 其中20090301和20090301221223之间为一个tab,20090301221223和1之间为两个tab

20090301    20090301221223        1
20090301           
20090301    20090301221225        3

-- 测试load命令

sqlldr userid=scott/tiger control=d:\test_sqlldr.ctl data=d:\test_sqlldr.dat log=d:\test_sqlldr.log

-- 运行结果

SQL*Loader: Release 10.2.0.1.0 - Production on 星期五 4月 10 13:38:05 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.                                                                            

达到提交点 - 逻辑记录计数 2
达到提交点 - 逻辑记录计数 3

-- 查看录入的结果

select * from test_sqlldr;

结果很奇怪,col4列全是空的,本应该录入col4列的却录入到了col3列。

但是将控制文件和data文件的字段分割符改为|就没有这个问题了

进一步实验证明,当用空白符做字段分隔符时(tab,blank)sqlldr会将连续在一起的空白符作为一个分隔符。会直接导致录入字段窜位问题!

如果想避免此类问题有如下方法

  • 指定其他字符作为分隔符,如^ | $ 等
  • 将字段用引号等包括起来
  评论这张
转发至微博
转发至微博
0   分享到:        
阅读(929)| 评论(1)| 引用 (0) |举报
 

历史上的今天

相关文章

最近读者

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

公司简介 - 联系方法 - 招聘信息 -