一个csv文件,要求将数据插入到两张表w_work1,w_work2中,
w_work1表主键:W_SEQ,且是w_work2表的外键
w_work2表主键:W_SEQ,KNSNG_CD;
在写ctl文件的时候,into table w_work1很顺利,
到into table w_work2时,表中KNSNG_CD需要根据一段sql文从第三张表中查出,但是查出的数据条数是不确定的
导致在sqlldr时,csv中一条数据可能对应多条KNSNG_CD
ctl文件:
load data
infile 'test.csv'
replace
into table w_work1
fields terminated by ',' optionally enclosed by '"'
trailing nullcols
(
W_SEQ       RECNUM,
......
)
into table w_work2
fields terminated by ',' optionally enclosed by '"'
trailing nullcols
(
W_SEQ       RECNUM,
KNSNG_CD    "select......(csv中的数据作为条件)"      --查询结果条数不确定
)
需求是要把查询的结果都插入到w_work2表中
例如:csv中第一行数据,会检索出3条KNSNG_CD,那么就要在w_work2中插入(1,KNSNG_CD1),(1,KNSNG_CD2),(1,KNSNG_CD3)
      csv中第二行数据,会检索出2条KNSNG_CD,那么就要在前面的基础上继续插入(2,KNSNG_CD1),(2,KNSNG_CD2)我试过把into table w_work2部分去掉,用一个function代替,写到into table w_work1中,但是因为主外键的关系,会发生异常
所以我想问一下还有别的方法能解决这个问题吗?
还是说sqlldr无法做到这个需求???希望各位大侠帮小弟一把!!!

解决方案 »

  1.   

    不要用load用外部表,直接操作外部表
      

  2.   

    KNSNG_CD    "select......(csv中的数据作为条件)"      --查询结果条数不确定 
    在这里地方用动态sql来解决你的问题。
      

  3.   

    to manchun:这样会有锁表的问题,导致w_work2表插入数据不全
    to ojuju10:外部表的使用时sqlldr里的内容吗,是不是不用ctl文件,还是在ctl文件里用外部表?我没用过,不是很明白,请解释一下
    to oraclelogan:sql文里表和项目都已经确定了
      

  4.   

    to RedFire:能否说得清楚些?