|
在使用delete语句删除数据时,数据库是要做日志记录的,以便将来可以恢复数据,可是我在删除上百万条数据时,十分缓慢甚至死机,请问有没有什么好方法?
网友观点一:
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>1000 then 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 IN 1..TRUNC(CNT/500)+1 LOOP DELETE FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,'MM')='01' AND ROWNUM<=500; COMMIT; END LOOP; END;
|