需要关联2个db的2张表,批量update,怎样才能知道哪些被更新??哪些没有被更新呢?try{ update loop},rollback.假如需要更新1000条记录,怎么样知道更已经新到哪条记录??
例如:我做了一个批量更新的循环,要更新1000条记录,因为是批量更新,情况一:更新到第500条时,失败了,回滚;情况二:更新到第600条的时候,失败了,回滚:结果都是为更新失败,回滚,那我怎么才能知道是更新到第500条还是第600条的时候出错的呢??在此种情况(已失败回滚)下,有没有可能统计出被更改过的记录是哪些?
例如:我做了一个批量更新的循环,要更新1000条记录,因为是批量更新,情况一:更新到第500条时,失败了,回滚;情况二:更新到第600条的时候,失败了,回滚:结果都是为更新失败,回滚,那我怎么才能知道是更新到第500条还是第600条的时候出错的呢??在此种情况(已失败回滚)下,有没有可能统计出被更改过的记录是哪些?
ID A B
---------- ---------- ----------
1 10 20
2 1 2
3 3 2表tb2及数据如下:
ID A B
---------- ---------- ----------
1 10 20
2 10 20根据表tb2的id更新表tb1对应的a,b的值。update tb1 set (a,b) = (select a,b from tb2 where id = tb1.id) where id in (select distinct id from tb2) ID A B
---------- ---------- ----------
1 10 20
2 10 20
3 3 2
---------------------------------------------------------------------------------------------------------
表tb2及数据如下:
ID A B
---------- ---------- ----------
1 10 20
2 10 20
3 3 2
1 20 40
2 20 40根据ID分组求A,B的和,然后更新表tb1update tb1 set (a,b) = (select sum(a),sum(b) from tb2 where id = tb1.id) where id in (select distinct id from tb2) ID A B
---------- ---------- ----------
1 30 60
2 30 60
得使用循环一个一个update,在哪个出错的时候,做个标记,然后rollback.
不過我建議樓主使用MERGE這個語法
很有用的
set a=select tb2.a from tb1,tb2 where tb1.id=tb2.id
b=select tb2.b from tb1,tb2 where tb1.id=tb2.id