参考:https://www.cnblogs.com/jyzhao/p/3879590.html
直接删除大量数据的影响:
1)可以由于undo表空间不足从而导致最终删除失败;
2)可以导致undo表空间过度使用,影响到其他用户正常操作;
改进方案:每删除1k行就提交一次。
declare
cursor [del_cursor] is select a.*, a.rowid row_id from [table_name] a order by a.rowid;
begin
for v_cusor in [del_cursor] loop
if v_cusor.[time_stamp] < to_date('2014-01-01','yyyy-mm-dd') then
delete from [table_name] where rowid = v_cusor.row_id;
end if;
if mod([del_cursor]%rowcount,1000)=0 then
commit;
end if;
end loop;
commit;
end;
[del_cursor] 游标名
[table_name] 删除数据的表名
[time_stamp] 用作过滤条件的时间字段名称
PS:
是否能够关闭表的log功能
alter table table_name nologging;
alter table table_name logging;