oracle批次处理数据_Oracle使用游标进行分批次更新数据的6种方式及速度比对

本文介绍了在Oracle中利用游标进行数据批量更新的6种方法,包括隐式游标、显式游标、以及使用BULK COLLECT和FORALL的高效方式,并对每种方法的执行速度进行了对比。强调了数据量大时使用BULK COLLECT和FORALL的推荐性,以及建立索引的重要性。
摘要由CSDN通过智能技术生成

1.情景展示

一共有22w条数据, 需要将A表的主键更新至B表的指定字段,如何快速完成更新?

2.解决方案

声明:

解决方案不只一种,该文章只介绍快速游标法及代码实现;

两张表的ID和ID_CARD字段都建立了索引。

方式一:使用隐式游标(更新一次提交1次)

--快速游标法

BEGIN

FOR TEMP_CURSOR IN (SELECT T2.ID, T2.ID_CARD

FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2

WHERE T1.ID_CARD = T2.ID_CARD

AND T1.REMARK = '**市****区数据'

AND T2.REMARK = '**市****区数据') LOOP

/* LOOP循环的是TEMP_CURSOR(逐条读取TEMP_CURSOR) */

UPDATE VIRTUAL_CARD10

SET INDEX_ID = TEMP_CURSOR.ID

WHERE ID_CARD = TEMP_CURSOR.ID_CARD;

COMMIT; --提交

END LOOP;

END;

执行时间:

方式二:使用隐式游标(更新1000次提交1次)(推荐使用)

/* 使用隐式游标进行分批次更新 */

DECLARE

V_COUNT NUMBER(10);

BEGIN

/* 隐式游标 */

FOR TEMP_CURSOR IN (SELECT T2.ID, T2.ID_CARD

FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2

WHERE T1.ID_CARD = T2.ID_CARD

AND T1.REMARK = '**市****区数据'

AND T2.REMARK = '**市****区数据') LOOP

/* 业务逻辑 */

UPDATE VIRTUAL_CARD10

SET INDEX_ID = TEMP_CURSOR.ID

WHERE ID_CARD = TEMP_CURSOR.ID_CARD;

/* 更新一次,+1 */

V_COUNT := V_COUNT + 1;

/* 1000条提交1次 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值