使用sqlldr正确地跳过空字段

时间:2017-01-17 04:39:32

标签: import format sql-loader

我需要将制表符分隔的文件上传到现有的Oracle表中。一些记录在中间有空字段(不是之前已经回答的整列),我无法使sqlldr正确加载记录之后的空字段。考虑示例文件:

ID->   col1-> col2-> col3
rec1-> 1.28-> 2.56-> 5.12
rec2-> 1.28-> -> 
rec3->     ->     -> 5.12

以及以下控制文件upload.ctl:

OPTIONS (SKIP=1) 
load data  infile 'file.tab'
replace into table TARGET_TABLE
fields terminated by "\t" optionally enclosed by '"'
TRAILING NULLCOLS
    (ID char terminated by "\t",
     col1 terminated by "\t",
     col2 terminated by "\t",
     col3 terminated by "\t")

将导致以下上传:

+------+------+------+------+
|ID    |col1  |col2  |col3  |
+------+------+------+------+
|rec1  |1.28  |2.56  |5.12  |
|rec2  |1.28  |(null)|(null)|
|rec3  |5.12  |(null)|(null)|

要上传的文件中的空字段使用正确数量的制表符填充,但sqlldr似乎将连续的制表符识别为一个。我怎么能防止这种情况? 感谢您查看我的新手问题!

1 个答案:

答案 0 :(得分:0)

它没有将TAB视为分隔符。将字段终止行更改为:

fields terminated by X'09' optionally enclosed by '"'

并删除" \ t""从每个列条目中不需要它。