Buns s Www h
searchssearchasearchc 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 n
s Datingbeatiful ; Buns nsearchssearch;显示下一条 | 关闭
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会将连续在一起的空白符作为一个分隔符。会直接导致录入字段窜位问题!
如果想避免此类问题有如下方法