【问题标题】:Mapping fields in Oracle SQL LoaderOracle SQL Loader 中的映射字段
【发布时间】:2013-08-20 09:54:25
【问题描述】:

当使用 Oracle SQL Loader 加载外部 csv 时,是否可以将控制文件中的字段直接相互映射?

目前我正在做一个简单的加载,所以源字段的位置很重要。有没有办法做到这一点?所以而不是:

load data
into table1
fields terminated by "," optionally enclosed by '"'
(destination_field1, destination_field2, destination_field3)

做一些类似的事情:

load data
into table1
fields terminated by "," optionally enclosed by '"'
(
source_field2 => destination_field1,
source_field1 => destination_field2,
source_field3 => destination_field3
)

编辑:

主要原因是源文件中列的顺序可以改变,所以我不能确定哪个字段是第一个,第二个等等。

【问题讨论】:

    标签: sql oracle mapping sql-loader


    【解决方案1】:

    您可以在控制文件中包含通过 Oracle 函数进行的任何数据处理。
    例如,此代码交换第 1 列和第 2 列,另外将 source_field2 转换为数字,默默地将错误值替换为空值:

    load data
    append
    into table SCHEMA.TABLE
    fields terminated by ';' optionally enclosed by '"'
    trailing nullcols
    (
      source_field1     BOUNDFILLER,
      source_field2     BOUNDFILLER,
      source_field3     BOUNDFILLER,
      destination_field1 "to_number(regexp_substr(:source_field2, '^[-0-9,]*'),'9999999999D999','NLS_NUMERIC_CHARACTERS='', ''')",
      destination_field2 ":source_field1",
      destination_field3 ":source_field3"
    )
    

    【讨论】:

    • 这很有趣。你不能做类似'destination_field1“DECODE(column1_headername,source_option1,destination_header1,source_option2,destination_header2,...)”之类的事情吗?那么要使用DECODE函数对header进行解码呢?
    • @user2693748 - 您可以使用 decode 或任何其他 Oracle 函数。但列名只是数据文件第一行的值,不能在其他数据行的表达式中访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2010-09-19
    • 2012-07-16
    • 2014-04-27
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多