【问题标题】:Oracle data not loading after POSITION(10)在 POSITION(10) 之后没有加载 Oracle 数据
【发布时间】:2017-07-05 11:54:56
【问题描述】:

我一直在尝试根据某些条件从 csv 文件加载一些数据,但我受到 when 子句 (Oracle ctl) 中使用“OR”控制的限制 为前 11 个条件加载数据,但在前 11 个条件之后不加载任何数据

以下是代码示例

     create table t1 (
     c1 varchar(10),
     c2 varchar(10),
     c3 varchar(10)
     )

---------数据加载器------------

     options(errors=20000)
     LOAD DATA
     INFILE 'D:\Scripts\abc.csv'              
     BADFILE 'D:\Scripts\abc.BAD'
     DISCARDFILE 'D:\Scripts\abc.DIS'
     DISCARDMAX 20000
     insert
     INTO TABLE t1

     when c1='James'

     FIELDS TERMINATED BY "," optionally enclosed by '"'

     Trailing NULLCOLS
     (             
     c1,

     c2,

     c3
     )

     INTO TABLE t1

     when c1='John'

     FIELDS TERMINATED BY "," optionally enclosed by '"'

     Trailing NULLCOLS
     (             
     c1 POSITION(1),

     c2,

     c3
     )

     INTO TABLE t1

     when c1='Sam'

     FIELDS TERMINATED BY "," optionally enclosed by '"'

     Trailing NULLCOLS
     (             
     c1 POSITION(2),

     c2,

     c3
     )
     .
     .
     .         
     INTO TABLE t1

     when c1='Mark'

     FIELDS TERMINATED BY "," optionally enclosed by '"'
     Trailing NULLCOLS
     (             
     c1 POSITION(12),

     c2,

     c3

     )

-------------dataloader 执行-----

     sqlldr scott/tiger direct=true control='filepath'

【问题讨论】:

    标签: oracle csv etl ctl


    【解决方案1】:

    为了执行每个条件,我们需要为每个条件放置 POSITION(1) 到 POSITION(9) 标记。否则 ctl 文件不会读取标记并忽略条件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2017-05-19
      相关资源
      最近更新 更多