使用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
它按预期工作。为什么制表符分隔的版本在这里失败?
答案 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)
)