Oracle 高效清理数据

declare
  -- Local variables here
  CURSOR CUR1 IS
    SELECT ec.ROWID
      from epcisbase.employee_channel ec, epcisbase.sas_employee t
 where t.employee_code = ec.employee_code
   and t.employee_channel in ('DS')
   and ec.business_source_code = '2'
   and ec.business_source_detail_code = '1'
   and ec.channel_source_code = 'J'
   and ec.channel_source_detail_code = 'H';

  
  V_ROWID_TAB DBMS_SQL.UROWID_TABLE;

  V_LIMIT   PLS_INTEGER := 5000; -->定义了一个变量来作为LIMIT的值
  V_COUNTER PLS_INTEGER := 0;
begin
  OPEN CUR1;
  LOOP
    FETCH CUR1 BULK COLLECT
      INTO V_ROWID_TAB -->FETCH时使用了BULK COLLECT子句
    LIMIT V_LIMIT; -->使用LIMIT子句限制提取数据量
  
    EXIT WHEN V_ROWID_TAB.COUNT = 0; -->注意此时游标退出使用了TMP_TAB.COUNT,而不是CUR1%NOTFOUND
    V_COUNTER := V_COUNTER + 1; -->记录使用LIMIT之后FETCH的次数
    
    if V_ROWID_TAB.count > 0 then       
    forall j in V_ROWID_TAB.FIRST .. V_ROWID_TAB.LAST
      delete epcisbase.employee_channel ec
       where ROWID = V_ROWID_TAB(j);
    end if;
    commit;
  END LOOP;

  CLOSE CUR1;
end;
/

 

另可参考:http://blog.chinaunix.net/uid-411974-id-88377.html

 

转载于:https://my.oschina.net/thc/blog/744272

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值