批量刪除Oracle資料庫的資料
網友觀點一:
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;
專家意見:幾個辦法:
1. 如果刪除的資料是大部分,建議使用樓上的方法把要保留的資料放在一個臨時表裡,truncate table後再放回來
2. 也可以分段提交,樓上也提到了
3. 專門使用一個大回滾段
4. 如果確認將來不需要做恢復,改為非歸檔模式,刪除完改回來再做個備份.
專家給出的解決方案:
有條件的分步刪除資料表中的記錄
--建立測試表
create table test as select * from dba_objects;
Table created.
--建立刪除表的儲存過程
create or replace procedure deleteTab
--插入語句
SQL> insert into test select * from dba_objects;
6374 rows created.
SQL> /
6374 rows created.
SQL> /
6374 rows created.
SQL> commit;
--建立刪除的儲存過程
create or replace procedure deleteTab
/**
** Usage: run the script to create the proc deleteTab
** in SQL*PLUS, type "exec deleteTab('Foo','ID>=1000000','3000');"
** to delete the records in the table "Foo", commit per 3000 records.
** Condition with default value '1=1' and default Commit batch is 10000.
**/
(
p_TableName in varchar2, -- The TableName which you want to delete from
p_Condition in varchar2 default '1=1', -- Delete condition, such as "id>=100000"
p_Count in varchar2 default '10000' -- Commit after delete How many records
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
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;
/
--執行語句
SQL> exec deleteTab('TEST','object_id >0','10000')
你看看執行結果我試驗過,效果還可以
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22036495/viewspace-1058839/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle批量建立、刪除資料庫表Oracle資料庫
- Oracle中大批量刪除資料的方法Oracle
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- 如何刪除oracle資料庫Oracle資料庫
- 手工刪除oracle資料庫Oracle資料庫
- 批量刪除空的資料夾
- ORACLE批量刪除無主鍵重複資料Oracle
- oracle手動刪除資料庫Oracle資料庫
- 手動刪除oracle資料庫Oracle資料庫
- [Oracle]Oracle資料庫資料被修改或者刪除恢復資料Oracle資料庫
- Oracle中大批量刪除資料的方法(轉自)Oracle
- Laravel 批量插入(如果資料存在刪除原資料)Laravel
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 刪除linux下的oracle資料庫LinuxOracle資料庫
- Laravel 資料庫裡的資料刪除Laravel資料庫
- windows下Oracle資料庫完全刪除WindowsOracle資料庫
- Oracle資料庫使用者刪除Oracle資料庫
- oracle資料庫備份刪除操作Oracle資料庫
- 已為資料庫映象啟動資料庫,必須刪除資料庫映象才能刪除該資料庫資料庫
- indexedDB 刪除資料庫Index資料庫
- 【RAC】刪除RAC資料庫節點(一)——刪除資料庫例項資料庫
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Oracle資料庫意外刪除資料檔案的恢復(轉載)Oracle資料庫
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- EM資料庫重建 手動刪除資料庫資料庫
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Oracle資料庫的BULK COLLECT用法之批量增刪改<轉>Oracle資料庫
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- 2.11 刪除資料庫資料庫
- 刪除資料庫指令碼資料庫指令碼
- 手動刪除資料庫資料庫
- oracle刪除重資料方法Oracle
- Oracle 刪除資料檔案Oracle