SQL * Loader控制文件将一个数据字段映射到两列

问题描述 投票:1回答:1

我正在使用带有sqlldr命令的shell脚本,将CSV文件中的数据加载到表中。

例如,包含此数据的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)

按预期加载到表中:

ANIMAL1    ANIMAL2    ANIMAL3    ANIMAL4   
---------- ---------- ---------- ----------
dog        cat        bird       fish      

但现在我想将数据加载到同一个表中

ANIMAL1    ANIMAL2    ANIMAL3    ANIMAL4   
---------- ---------- ---------- ----------
dog        fish       bird       fish      

所以不是'猫',而是想在第二和第四列中都有'鱼'。

如何修改我的控制文件来实现这一目标?

oracle oracle12c sql-loader
1个回答
1
投票

您可以将其他字段作为an SQL expression的一部分引用,因此在这种情况下,您只需使用bind-variable-type语法将文件中的字段值替换为另一个字段:

...
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
(
  animal1,
  animal2 ":animal4",
  animal3,
  animal4
)

使用原始控制文件加载样本CSV并按上述方法修改后,该表包含:

select * from animals;

ANIMAL1    ANIMAL2    ANIMAL3    ANIMAL4   
---------- ---------- ---------- ----------
dog        cat        bird       fish      
dog        fish       bird       fish      
© www.soinside.com 2019 - 2024. All rights reserved.