使用 sqlldr 正确跳过空字段
Correctly skipping empty fields with sqlldr
我需要将制表符分隔的文件上传到现有的 Oracle table。一些记录在中间有空字段(不是之前回答的整列),我无法让 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 似乎将连续的制表符识别为一个。我怎样才能防止这种情况发生?
感谢您检查我的新手问题!
没有将 TAB 视为分隔符。将字段终止行更改为:
fields terminated by X'09' optionally enclosed by '"'
并从每个列条目中删除 "terminated by "\t"",因为那里不需要。
我需要将制表符分隔的文件上传到现有的 Oracle table。一些记录在中间有空字段(不是之前回答的整列),我无法让 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 似乎将连续的制表符识别为一个。我怎样才能防止这种情况发生? 感谢您检查我的新手问题!
没有将 TAB 视为分隔符。将字段终止行更改为:
fields terminated by X'09' optionally enclosed by '"'
并从每个列条目中删除 "terminated by "\t"",因为那里不需要。