寫乙個迴圈刪除的過程。
create or replace procedure delbigtab(p_tablename in varchar2,p_condition in varchar2,p_count in varchar2)
aspragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
execute immediate
'delete from '||p_tablename||' where '||p_condition||' and rownum <= :10000'
using p_count;
if sql%notfound then
exit;
else
n_delete:=n_delete + sql%rowcount;
end if;
commit;
end loop;
commit;
dbms_output.put_line('finished!');
dbms_output.put_line('totally '||to_char(n_delete)||' records deleted!');
end delbigtab;
呼叫:sql> set timing on
sql> exec delbigtab('hs_dlf_downlog_history','numdlflogguid < 11100000','10000');
pl/sql procedure successfully completed.
elapsed: 00:00:18.54
方法雖好,但我應用在乙個億級資料庫時還是覺得慢得不行。就算刪一點點資料也覺得好象挺慢的。
Oracle中大批量刪除資料的方法
批量刪除海量資料通常都是很複雜及緩慢的,方法也很多,但是通常的概念是 分批刪除,逐次提交。下面是我的刪除過程,我的資料表可以通過主鍵刪除,測試過delete和for all兩種方法,for all在這裡並沒有帶來效能提高,所以仍然選擇了批量直接刪除。首先建立一下過程,使用自製事務進行處理 creat...
C 中大批量資料匯入
database db databasefactory.createdatabase using sqlconnection connection sqlconnection db.createconnection bulk.writetoserver dspayment.tables 1 bulk...
Oracle儲存過程刪除大批量資料
參考 批量刪除海量資料通常都是很複雜及緩慢的,方法也很多,但是通常的概念是 分批刪除,逐次提交。下面是我的刪除過程,我的資料表可以通過主鍵刪除,測試過delete和for all兩種方法,for all在這裡並沒有帶來效能提高,所以仍然選擇了批量直接刪除。操作如下 建立日誌記錄表 create ta...