update tabA a
set (col1, col2) =
(select col1, col2
from tabB b
where a.id = b.id
and b.upd_time = (select max(upd_time) from tabB b1 where b1.id = b.id))
where upd_time > trunc(sysdate)+3/24-1;--比如前一天晚上3点同步过数据
更新中嵌套子查询,更新的每条记录都需要查一遍,效率很低更改为一次查询逐条更新,甚至可通过rowid更新。
for cur in (select RowidToChar(p.rowid) rid, col1, col2
from xxx
where xxx
)
loop
update tabA set col1=cur.col1, col2=cur.col2 where rowid = charToRowid(cur.rid);
end loop;