1、构建临时表进行主键关联更新
需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。
做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,那么需要将a,b转化成主键后再插入到T2表中,T2表中还可以保存更新前的数据,方便做数据回滚,T2表中有数据后,就可以执行下面脚本进行更新操作:
ps:c,d是需要更新的操作,e,f是条件。必须强调的是id必须是主键
update (select T1.c,T1.d,T2.e,T2.f,T1.updated_by,T1.date_updated
from T1,T2 where T1.id=T2.id)
set T1.c=T2.e,
T1.d=T2.f,
T1.updated_by=user,
T1.date_updated=sysdate;
2、分批更新
同样的需要,更新的脚本如下:
begin
v_cursor for (select r from T1 group by r) loop
update T1
set T1.c = (select T2.e from T2 where T2.id=T1.id),
T1.d = (select T2.f from T2 where T2.id=T1.id)
T1.updated_by=user,
T1.date_updated=sysdate
where T1.r=v_cursor.r;
end loop
end;