我正在使用带有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
因此,我不想在第二列和第四列中都使用“鱼”代替“猫”。
如何修改控制文件以实现该目标?
答案 0 :(得分: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