oracle使用游标的存储过程,清理带外键的数据。

好久没有写oracle 的存储过程跟游标。今天接了个需求刚好练练手。好记性不如烂笔头

 

create or replace PROCEDURE QQQ
  is
      tempKey number;
      tempAge number;
      tempInstCursor SYS_REFCURSOR;
      tempMessage  varchar2(300);
      workDate date;
      V_DATACOUNT NUMBER;
  BEGIN
  v_dataCount :=1;
  tempMessage:='success';

   workDate := sysdate-30;
   if workDate is not null then
     begin

        open tempInstCursor for
              select AAAKey,AAAage from AAA it where it.whenmodified <TRUNC(workDate) ;
        loop
        -- step1 使用游标方式 查询出符合条件的 执行遍历
        fetch tempInstCursor into tempKey,tempAge;
              dbms_output.put_line('AAAKey='||tempKey ||'AAAage='||tempAge);
              exit when tempInstCursor%NOTFOUND;

              delete from BBB where AAAKEY=tempKey;

              delete from CCC where DDDDKEY=(select t.DDDDKEY from DDD t where t.AAAKEY=tempKey);
              delete from DDD where AAAKEY=tempKey;

              delete from AAA  where AAAKEY = AAAKey;

              v_dataCount := v_dataCount + 1;
             if v_dataCount >= 500 then
                dbms_output.put_line('commit; v_dataCount'||v_dataCount);
                v_dataCount :=0;
                commit;
              end if;
        end loop;

        commit;  
      exception
            when OTHERS  then
              tempMessage:='Failed';
              update BBB set version=0  ;
              commit;
              update AAA set version=0  ;
              commit;
              update CCC set version=0  ;
              commit;
      end;
      tempMessage := tempMessage||',finish time:'||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');

    end if;
       
  END QQQ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值