一、 批量提交
批量提交特点 :
占用较少undo, 资源( 独占锁,undo) 快速释放, 执行时间长
批量提交适合场景 :
在线大批量插入, 更新, 删除数据
二、 BULK COLLECT+FORALL 性能提升
1. 通过 BULK COLLECT 加速查询
不管是显示游标还是隐式游标,都可以通过BULK COLLECT
在数据库的单次交互中获取多行数据。BULKCOLLECT
相对Cursor Loop
方式减少了PL/SQL
引擎和SQL
引擎之间的切换次数,因此也减少了提取数据时的额外开销。
2 通过 LIMIT rows 限制提取的记录数
这种方法会减少对PGA 的消耗, 避免换页产生
3 通过 FORALL 加速 DML
FORALL
告诉PL/SQL
引擎要先把一个或多个集合的所有成员都绑定到SQL
语句中,然后再把语句发送给SQL
引擎,
如果for ..loop
循环,那么会发送n(
循环的次数)
次,而用Forall
,一次行全部发送过去。
三、 BULK COLLECT + FORALL 批量提交例句
insert
TYPE ARRAY IS TABLE OF big_table%ROWTYPE;
OPEN c;
FETCH c BULK COLLECT INTO l_data LIMIT 5000;
FORALL i IN 1..l_data.COUNT
commit;
END LOOP;
CURSOR mycursor IS SELECT rowid FROM t WHERE OO=XX ;
v_rowid rowid_table_type;
OPEN mycursor;
FETCH mycursor BULK COLLECT INTO v_rowid LIMIT 5000;
FORALL i IN v_rowid.FIRST..v_rowid.LAST
COMMIT;
CLOSE mycursor;
/
DECLARE
TYPE num_tab_t IS TABLE OF NUMBER(38);
OPEN mycursor;
FETCH mycursor BULK COLLECT INTO pk_tab LIMIT 5000;
FORALL i IN pk_tab.FIRST..v_rowid.LAST
SET name=name||’bulk’
COMMIT;
CLOSE mycursor;
/