fetch bulk collect into 使用

本文介绍了一种通过使用FETCH BULK COLLECT INTO批量读取数据游标的方法,显著提高了Oracle数据库中游标的处理速度。该方法避免了传统的逐条读取方式,通过一次性获取大量数据,减少了I/O操作次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在读取大量数据游标时,速度十分慢!然而使用fetch bulk collect into 批量效率能有效提高读取游标速度:
例如:
CREATE OR REPLACE PROCEDURE "WINBO_DELETE_PUR_REQ"
Is
 
  Type winbo Is Table Of  purchase_requisition_tab.REQUISITION_NO%Type;
  winbo_ winbo;
 CURSOR get_requisition_no IS
 Select A.REQUISITION_NO
From PURCHASE_REQUISITION A
Where A.REQUISITIONER_CODE!='MRP'
And Not Exists (Select 1 From PURCHASE_REQ_LINE_PART B
                           Where B.requisition_no=A.requisition_no)
And  Not Exists (Select 1 From PURCHASE_REQ_LINE_NOPART c
                           Where c.requisition_no=A.requisition_no);

begin
  -- Test statements here:如些进行循环操作数据,速度十分慢
  /*FOR rec_ IN get_requisition_no LOOP
       BEGIN
          Delete FROM  purchase_requisition_tab WHERE REQUISITION_NO =rec_.requisition_no ;
       EXCEPTION
          WHEN OTHERS THEN
             dbms_output.put_line('error:'||Sqlerrm||'requisition_no:'||rec_.requisition_no);       END;
   END LOOP;  */
 
   --Forall i IN 1..winbo_.Count:利用fetch bulk collect into批量读取数据,提高速度
   Open get_requisition_no;
   Fetch get_requisition_no Bulk Collect Into winbo_ ;
   Forall i In winbo_.First..winbo_.Last
      Delete FROM  purchase_requisition_tab WHERE REQUISITION_NO = winbo_(i);
   close get_requisition_no;
End winbo_delete_pur_req;

 
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值