1

我一直在尝试根据某些条件从 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

     )

--------------数据加载器执行-----

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

1 回答 1

0

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

于 2017-07-05T13:39:40.477 回答