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

问题描述 投票:0回答:1

使用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

注意前两列是空的(null)。所以我的排是真的:

\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

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

sql-loader
1个回答
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)
)
© www.soinside.com 2019 - 2024. All rights reserved.