oracle 大表删除数据,保留部分数据

oracle 大表删除数据,保留部分数据(一般以时间来限制,最好时间有索引这样更方便)

一:简单

begin   /*开始*/
    loop    --循环执行


         delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<=5000;
        
         --没有记录时退出
         exit when sql%notfound;
         commit;    /*记住每次要提交*/
    end loop;
end;
/        --反斜杠表示程序执行

**********************************************************

二:复杂

 round_int设置循环的执行的次数,修改执行删除的语句。

返回:每次删除的行及删除的总行数

SET SERVEROUTPUT ON; --输出信息默认是关闭,要先打开在sqlplus中才看得到DBMS_OUTPUT.PUT_LINE的输出。


declare
    round_int number:=5;  --执行5次,设置执行的次数

    v_num number:=0;  --本次执行的行数
    v_sum number:=0;  --行数加总

    i number:=1;          --循环基数,从1开始
BEGIN

loop
    --控制删除次数
    IF not i<=round_int THEN
        exit;  --退出循环
    END IF;

        --删除语句

   delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<=5000;
   
      
    v_num := sql%rowcount; --得到本次执行的记录数
    v_sum :=v_sum +v_num; --合计
    
    --输出本次记录
    dbms_output.put_line('DELETE ROWS:' || v_num);

    exit when sql%notfound;  --无数据退出

    commit; /*记住每次要提交*/

    i:=i+1;

end loop;
    --输出合计
    DBMS_OUTPUT.PUT_LINE('DELETE ALL ROWS:' || v_sum);
END;
/

*****************************************************************************

三,用存储过程来删除

CREATE OR REPLACE
PROCEDURE "delete_rows" (round_int IN NUMERIC DEFAULT '0')
AS
    v_num number:=0;  --本次执行的行数
    v_sum number:=0;  --行数加总

    i number:=1;          --循环次数
BEGIN

loop
    --控制删除次数
    IF not i<=round_int THEN
        exit;  --退出循环
    END IF;

   delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<100;
   
      
    v_num := sql%rowcount; --得到本次执行的记录数
    v_sum :=v_sum +v_num; --合计
    
    --输出本次记录
    dbms_output.put_line('DELETE ROWS:' || v_num);

    exit when sql%notfound;

    commit; /*记住每次要提交*/

    i:=i+1;

end loop;
    --输出合计
    DBMS_OUTPUT.PUT_LINE('DELETE ALL ROWS:' || v_sum);
END;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值