删除大量Oracle数据方法总结
Oracle中删除超过50w条记录的数据,如果直接使用delete,效率就严重受到了影响。那么首先我们需要了解对于这个表的数据,我们到底是全部删除,还是部分删除。这里有三个关键字我们需要注意:truncate,delete,drop。
全部删除,不保留数据结构就直接drop最好。如果是部分删除,一般就这样一些办法:
1. 如果删除的数据是大部分,分段提交删除的数据。
create or replace procedure
delete_table is i number(10);
begin
for x in (select * from emp where DEPTNO like‘a%’)
loop
delete emp where emp.id = x.id i:=i+1;
if i>1000then
commit;
i:=0;
end if;
end loop;
exception when others then dbms_out.put_line(sqlcode);
rollback;
end delete_table;
或者
–每500条数据提交一次
DECLARE CNT NUMBER(10):=0;
I NUMBER(10);
BEGIN
SELECT COUNT(*) INTO CNT FROM ep_arrearage_bak
WHERE TO_CHAR(DF_DATE,‘MM’)=’01′;
FOR I IN1..TRUNC(CNT/500)+1
LOOP
DELETE FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,‘MM’)=’01′AND ROWNUM<=500;
COMMIT;
END LOOP;
END;
2、把要保留的数据放在一个临时表里,truncate table原表后再放回来;