占用较少undo, 资源( 独占锁,undo) 快速释放, 执行时间长
在线大批量插入, 更新, 删除数据
不管是显示游标还是隐式游标,都可以通过BULK COLLECT
在数据库的单次交互中获取多行数据。BULKCOLLECT
相对Cursor Loop
方式减少了PL/SQL
引擎和SQL
引擎之间的切换次数,因此也减少了提取数据时的额外开销。
这种方法会减少对PGA 的消耗, 避免换页产生
FORALL
告诉PL/SQL
引擎要先把一个或多个集合的所有成员都绑定到SQL
语句中,然后再把语句发送给SQL
引擎,
如果for ..loop
循环,那么会发送n(
循环的次数)
次,而用Forall
,一次行全部发送过去。
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;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29863023/viewspace-1979270/ ,如需转载,请注明出处,否则将追究法律责任。