如何有條件的分步刪除資料表中的記錄

2021-03-31 12:15:34 字數 1932 閱讀 6542

« 自己動手,豐衣足食

| blog首頁

有時候我們需要分配刪除資料表的一些記錄,分批提交以減少對於undo的使用,本文提供乙個簡單的儲存過程用於實現該邏輯。

你可以根據你的需要進行適當調整,本例僅供參考:

sql> create table test as select * from dba_objects;

table created.

sql> create or replace procedure deletetab

2 /**

3 ** usage: run the script to create the proc deletetab

4 ** in sql*plus, type "exec deletetab('foo','id>=1000000','3000');"

5 ** to delete the records in the table "foo", ***mit per 3000 records.

6 **

7 **/

8 (

9 p_tablename in varchar2, -- the tablename which you want to delete from

10 p_condition in varchar2, -- delete condition, such as "id>=100000"

11 p_count in varchar2 -- ***mit after delete how many records

12 )

13 as

14 pragma autonomous_transaction;

15 n_delete number:=0;

16 begin

17 while 1=1 loop

18 execute immediate

19 'delete from '||p_tablename||' where '||p_condition||' and rownum <= :rn'

20 using p_count;

21 if sql%notfound then

22 exit;

23 else

24 n_delete:=n_delete + sql%rowcount;

25 end if;

26 ***mit;

27 end loop;

28 ***mit;

29 dbms_output.put_line('finished!');

30 dbms_output.put_line('totally '||to_char(n_delete)||' records deleted!');

31 end;

32 /

procedure created.

sql> insert into test select * from dba_objects;

6374 rows created.

sql> /

6374 rows created.

sql> /

6374 rows created.

sql> ***mit;

***mit ***plete.

sql> exec deletetab('test','object_id >0','3000')

finished!

totally 19107 records deleted!

pl/sql procedure successfully ***pleted.

很簡單,但是想來也有人可以用到。

如何有條件的分步刪除資料表中的記錄

自己動手,豐衣足食 blog首頁 有時候我們需要分配刪除資料表的一些記錄,分批提交以減少對於undo的使用,本文提供乙個簡單的儲存過程用於實現該邏輯。你可以根據你的需要進行適當調整,本例僅供參考 sql create table test as select from dba objects tab...

有條件的表聯接

表1和表2在聯接時,希望顯示表1的全部記錄以及表2的部分記錄。嘗試使用下面的 sql 語句 select table1.table2as.from table1 left outer join select from table2 where rightname 計畫編制員 as table2as ...

如何在SQLSERVER中快速有條件刪除海量資料

如何在sqlserver中快速有條件刪除海量資料 來自 great domino的 blog 最近有個朋友問我,他說他在sqlserver刪除幾百萬到幾千萬資料是顯的很慢,幫他分析了一下,提了一些以下意見,或許對很多人有用,再者也好長沒寫過blog了,一起 一下 如果你的硬碟空間小,並且不想設定資料...