看点如下:
1.变量设置初始值
2.使用bulk collect一次性取数据到内存,每2500条提交一次,一来避免快照过旧的报错,二来提高效率不像游标一条条取
3.通过rowid做删除操作
 
 
  1. create or replace procedure newsadmin.p_bulkdel_newlog(p_edate in date
  2.                                                        p_sdate in date default to_date('2012-06-01','yyyy-mm-dd')) is 
  3.   TYPE ARRROWID IS TABLE OF ROWID INDEX BY BINARY_INTEGER; 
  4.   tbrows ARRROWID; 
  5.   row    PLS_INTEGER; 
  6.   cursor delete_table is 
  7.     select rowid 
  8.       from newsadmin.newlog 
  9.      where EITIME <= p_edate 
  10.        and eitime >= p_sdate; 
  11. BEGIN 
  12.   open delete_table; 
  13.   loop 
  14.     fetch delete_table bulk collect 
  15.       into tbrows limit 2500; 
  16.     FORALL row IN 1 .. tbrows.count() 
  17.       DELETE newsadmin.newlog WHERE rowid = tbrows(row); 
  18.     commit
  19.     -- sys.dbms_lock.sleep(1);   
  20.     exit when delete_table%notfound; 
  21.   end loop; 
  22.   close delete_table; 
  23. END
  24.   
  25.