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