SQL*Loader 控制文件将一个数据字段映射到两列
SQL*Loader control file mapping one data field to two columns
我正在使用带有 sqlldr
命令的 shell 脚本,将数据从 CSV 文件加载到 table.
例如包含以下数据的 CSV 文件:
dog;cat;bird;fish;
和这个控制文件:
OPTIONS (SKIP=1) LOAD DATA
INFILE *
APPEND
INTO TABLE animals
FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"'
(
animal1, animal2, animal3, animal4)
按预期加载到 table:
ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog cat bird fish
但现在我想将数据加载到与
相同的table中
ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog fish bird fish
所以我想在第二列和第四列中使用 'fish' 而不是 'cat'。
如何修改我的控制文件来实现?
您可以引用其他字段作为 an SQL expression 的一部分,因此在这种情况下,您只需将文件中的字段值替换为另一个字段,使用绑定变量类型语法:
...
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
(
animal1,
animal2 ":animal4",
animal3,
animal4
)
在使用原始控制文件加载示例 CSV 并按上述方式修改后,table 包含:
select * from animals;
ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog cat bird fish
dog fish bird fish
我正在使用带有 sqlldr
命令的 shell 脚本,将数据从 CSV 文件加载到 table.
例如包含以下数据的 CSV 文件:
dog;cat;bird;fish;
和这个控制文件:
OPTIONS (SKIP=1) LOAD DATA
INFILE *
APPEND
INTO TABLE animals
FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"'
(
animal1, animal2, animal3, animal4)
按预期加载到 table:
ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog cat bird fish
但现在我想将数据加载到与
相同的table中ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog fish bird fish
所以我想在第二列和第四列中使用 'fish' 而不是 'cat'。
如何修改我的控制文件来实现?
您可以引用其他字段作为 an SQL expression 的一部分,因此在这种情况下,您只需将文件中的字段值替换为另一个字段,使用绑定变量类型语法:
...
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
(
animal1,
animal2 ":animal4",
animal3,
animal4
)
在使用原始控制文件加载示例 CSV 并按上述方式修改后,table 包含:
select * from animals;
ANIMAL1 ANIMAL2 ANIMAL3 ANIMAL4
---------- ---------- ---------- ----------
dog cat bird fish
dog fish bird fish