網友觀點一:
create or replace procedure delete_table
isi 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')
你看看執行結果我試驗過,效果還可以
oracle大表刪除資料方案
需求簡介 生產資料庫乙個表有27億多資料,要刪除其中其中2014年之前的歷史資料 大約4億左右 表資訊 5個字段的主鍵 乙個欄位的單列索引 hash分割槽。資料庫情況 每日1 00 9 00會跑增量資料程式,其他sql不能影響增量程式。所以資料要在9 00 24 00之內跑完 解決方案1 delet...
oracle大量資料刪除
oracle有個資料表現在已經有2500萬條資料了,軟體用到這個表的資料時就變的特別慢,所以準備把乙個月以前的資料全部清除。我的步驟是 下邊操作都是在plsql中執行的 1 首先 將這個月的資料匯出到乙個臨時表中 這些資料是自己希望保留的 create table temptable as sele...
oracle刪除資料
oracle在表中刪除資料的語法是 語法結構 delete from表名 where 條件 演示 sql delete from infos where stuid s100103 1 row deleted sql commit truncate 在資料庫操作中,truncate命令 是乙個ddl...