FORALL与BULK COLLECT的使用方法:
1.使用FORALL比FOR效率高,因为前者只切换一次上下文,而后者将是在循环次数一样多个上下文间切换。
2.使用BLUK COLLECT一次取出一个数据集合,比用游标条取数据效率高,尤其是在网络不大好的情况下。但BLUK COLLECT需要大量内存。
例子:
- createtabletest_forall(user_idnumber(10),user_namevarchar2(20));
select into 中使用bulk collect
DECLARE
@H_
301_38@TYPEtable_forall
ISTABLEOFtest_forall%ROWTYPE;
@H_
301_38@v_tabletable_forall;
BEGIN
SELECTmub.user_id,mub.user_name
@H_
301_38@BULKCOLLECT
INTOv_table
FROMmag_user_basicmub
WHEREmub.user_idBETWEEN10000AND10100;
@H_
301_38@FORALLidx
IN1..v_table.COUNT
INSERTINTOtest_forallVALUESv_table(idx);
@H_
301_38@
@H_
301_38@--在PL/
sql中,BULKIn-BIND与RECORD,%ROWTYPE是不能在一块使用的,
@H_
301_38@--也就是说,BULKIn-BIND只能与简单类型的数组一块使用
COMMIT;
@H_
301_38@
@H_
301_38@EXCEPTION
WHENOTHERSTHEN
ROLLBACK;
END;
_38@...