告诉 sqlldr 控制文件将缺失值加载为 NULL

Tell sqlldr control file to load missing values as NULL

我有一个 CSV 文件。我如何告诉 sqlldr 控制文件将缺失值加载为 NULL。 (即 table 架构允许某些列为 NULL)

CSV 示例

1,Name1
2,Name2
3,
4,Name3

你能帮我在这里编辑我的控制文件,以便第 3 行,缺失值在我的 table

中插入为 NULL

Table

Create table test
( id Number(2), name Varchar(10), primary key (id) );

控制文件

LOAD DATA INFILE '{path}\CSVfile.txt'
INSERT INTO test
FIELDS TERMINATED BY ','
(id CHAR,
 name CHAR
)

我相信你只需要这样做:

name  CHAR(10) NULLIF(name=BLANKS)

我发现使用 TRAILING NULLCOLS 可以完成工作,但它必须用于记录行末尾的 "blanks"。

LOAD DATA INFILE {path}\Your_File
INSERT INTO TABLE Your_Table
TRAILING NULLCOLS
FIELDS TERMINATED BY ","
(
 ... your fields
)

您必须向 SQL*Loader 提示您的数据中可能存在空值。

2 种向 SQL*Loader 提示的方法。

  • 使用 TRAILING NULLCOLS 选项。
LOAD DATA INFILE '{path}\CSVfile.txt'
INSERT INTO test<br>
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(id CHAR,
 name CHAR
)
  • 重新创建包含字段的 CSV 文件,然后使用 OPTIONALLY ENCLOSED BY '"' 让 SQL*Loader 清楚地看到数据中的空值(两者之间没有任何内容)引号)看起来像 "abcd",""
LOAD DATA INFILE '{path}\CSVfile.txt'
INSERT INTO test<br>
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(id CHAR,
 name CHAR
)