【问题标题】:SQL*Loader control file mapping one data field to two columnsSQL*Loader 控制文件将一个数据字段映射到两列
【发布时间】:2019-03-19 08:44:08
【问题描述】:

我正在使用带有 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      

所以我希望在第二列和第四列中都包含“fish”而不是“cat”。

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

【问题讨论】:

    标签: oracle oracle12c sql-loader


    【解决方案1】:

    您可以将其他字段作为an SQL expression 的一部分引用,因此在这种情况下,您可以使用绑定变量类型语法将文件中的字段值替换为另一个字段:

    ...
    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      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2012-10-28
      • 2019-02-22
      相关资源
      最近更新 更多