sqlldr无法识别空白制表符分隔的列

时间:2019-03-20 23:26:21

标签: sql-loader

使用sqlldr加载数据时遇到一个奇怪的问题。这是我的表架构:

CREATE TABLE TEST(
   "COL1" VARCHAR2 (255 BYTE),
   "COL2" VARCHAR2 (255 BYTE),
   "COL3" NUMBER,
   "COL4" VARCHAR2 (255 BYTE)

这是我尝试从制表符分隔的文件test.txt中提取的一行数据:

COL1    COL2    COL3    COL4
        10  17-cc

请注意,前两列为空(空)。所以我的确是这样:

\t\t10\t17-cc

我的加载程序脚本:

load data
 infile 'test.txt'
 append into table TEST
 fields terminated by "\t" optionally enclosed by '"'
 TRAILING NULLCOLS  
(COL1,COL2,COL3,COL4)

这将以以下方式加载到我的表中:

COL1 COL2  COL3   COL4
10    17-CC (null) (null)

这是不正确的。似乎数据行中的两个前导选项卡已被忽略,并且将COL3位置(10)分配给了COL1。但是,如果我尝试将数据导入为逗号分隔文件:

COL1,COL2,COL3,COL4
,,10,17-cc

它按预期工作。为什么制表符分隔的版本在这里失败?

1 个答案:

答案 0 :(得分:0)

注意-修正了我原来的错误答案。

您的TAB定义就很好。您需要NULLIF语句:

load data
 infile 'test.txt'
 append into table TEST
 fields terminated by "\t" optionally enclosed by '"'
 TRAILING NULLCOLS  
(COL1 NULLIF(COL1=BLANKS),
 COL2 NULLIF(COL2=BLANKS),
 COL3 NULLIF(COL3=BLANKS),
 COL4 NULLIF(COL4=BLANKS)
)