网站首页 > 数据库 / 正文
一,业务场景
Oracle 更新数据时,数据库会对整个更新动作做一个事务,如果一次更新的记录太大会用完内存,导致影响业务运行。
二,解决办法
思路就是用游标处理每条数据,安需批量提交。
三、举例
我们要更新某个渠道的订单的所有商品的价格,我们每2万行提交一次。
参考脚本
declare
v_count integer;
begin
v_count := 0;
for i in (
--这里可以把要修复的数据放临时表,或者关联查询把数据准备好
select h.ID, i.ID as ITEM_ID, i.ORIGIN_PRICE
from ORDERS h
join ORDERS_ITEM i on h.ID = i.ORDER_ID
where h.CHANNEL_ID = 'A'
)
loop
v_count := v_count + 1;
update ORDERS_ITEM t
set t.ACTUAL_PRICE = i.ORIGIN_PRICE
where t.ID = i.ITEM_ID;
if (MOD(v_count, 20000) = 0) -- 每两万行提交一次
then
commit;
end if;
end loop;
commit;
end;
Tags:oracle into 临时表
猜你喜欢
- 2024-11-26 云贝教育 |【技术文章】Oracle 锁的使用 与 oradebug休眠唤醒进程
- 2024-11-26 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
- 2024-11-26 服务器异常关机导致Oracle启动失败
- 2024-11-26 mysql中exists 和 in的用法你还真不知道
- 2024-11-26 ORACLE 临时解决Ora-4031问题