SQLLDR能在引入数据时保留表中原来的数据(必须用append),
但要做到“如果发现KEY重复时,再UPDATE对应的记录”据我所知
单用SQLLDR是没有办法做到的。

解决方案 »

  1.   

    那么,有没有办法在运行SQLLOAD时,如果出现key重复,使oracle能报错出来。现在出错的话,只有在log文件中反映出来,而程序却无法捕捉到。
      

  2.   

    自己定义一个bad文件,SQLLOAD会把出错记录写到里面的!
      

  3.   

    这个很容易解决,在建立表的时候,先不要建立主键,append  load,然后执行一SQL语句,将key重复的旧的数据删除,只保留最新数据,然后再建立主键
      

  4.   

    需要建立中间临时表,先根据某一个或某一些字段查出来count(*)>2的(一定是重记录)
    将所查出来的数据存入一临时表中,通过该临时表和原表对照,并指定一条件来进行删除:)具体的SQL语句自己写吧,因为我不知道你的表结构,只要思路对,就很容易搞定
      

  5.   

    你看看下面一条删除重复sql语句能否搞
    delete from jxk where rowid!=(select max(rowid) from jxk jxk2 where jxk.dhhm=jxk2.dhhm)
    注:JXK2为表JXK的别名.DHHM是jxk表中的需要删除的重复字段
      

  6.   

    MERGE INTO bonuses D
      USING (SELECT employee_id, salary, department_id FROM employees
             WHERE department_id = 80) S
      ON (D.employee_id = S.employee_id)
      WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
      WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
        VALUES (S.employee_id, S.salary*0.1);