oracle批量删除

来源:互联网 发布:买黄金软件下载 编辑:程序博客网 时间:2024/05/22 03:29

项目中有个需求需要每个月末定时去删除一张表里的历史数据,

刚开始就写了一个简单的delete语句,然后起一个JOB定时去调用,

后来被告知历史数据量很大,所以从性能和安全上考虑对sql进行了如下修改:

declare cursor ID_KEY_CURSOR is    select ID_KEY       from X_TABLE     where X_COLUMN = "xxx"begin    for V_TO_DEL in ID_KEY_CURSOR loop        delete X_TABLE        where ID_KEY = V_TO_DEL.ID_KEY    if mod(ID_KEY_CURSOR%Rowcount, 5000) = 0        then commit;    end if;    end loop;    commit;end;


将处理的数据每5000笔提交一次,分批处理;

ID_KEY可以是X_TABLE的主键,也可以是ROW_ID;


上面的方法使用了游标,循环打开游标会影响一定的性能

下面是一种效率更高的方法

begin    loop        delete from table_name         where column_name = 'xxx'           and  rownum <=5000;        exit when sql%notfound;        commit;    end loop;end;





原创粉丝点击