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