使用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
它按预期工作。为什么制表符分隔的版本在这里失败?
注意 - 修正了我原来的错误答案。
您的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)
)