假设有表T     ID,Num是联合主键
ID   Num
1    20
2    30
3    40
现我想对表T作修改,例如更新如下:
ID   Num
2    30
3    40
4    50
意思是: 如果有对应的ID则更新,没有对应就插入,删除多余的旧数据
由于数据量比较大,更新,插入新数据,删掉多余数据,太费时间.
我想先把旧数据全部删除,然后把插入新数据.
但这样做出现问题:
我删除所有旧数据后,若我不提交事务,插入(2,30),(3 ,40)
等数据就有问题(因为ID,Num是联合主键).
若我提交事务后,再插入新数据,如果在插入新数据过程中出错.
我就没办法恢复到原来的数据...请各位指教指教..如何解决这样的问题..谢谢....

解决方案 »

  1.   

    错误号意思:IDispatch error #3119 错误描述:ORA-00001: 违反唯一约束条件
      

  2.   

    如果是在同一个会话中做删除再插入,是不会报00001错误的。测试如下:
    SQL> create table t_test as select rownum id, last_ddl_time from user_objects;表已创建。SQL> alter table t_test add constraint pk_test primary key(id);表已更改。SQL> select id from t_test;        ID
    ----------
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
            11        ID
    ----------
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22        ID
    ----------
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33        ID
    ----------
            34
            35
            36
            37
            38
            39已选择39行。SQL> delete t_test;已删除39行。SQL> insert into t_test values(1,sysdate);已创建 1 行。SQL> insert into t_test values(5,sysdate);已创建 1 行。SQL> select id from t_test;        ID
    ----------
             1
             5SQL> rollback;回退已完成。SQL>