如何有条件的分步删除数据表中的记录
2005-02-22 23:48
579 查看
如何有条件的分步删除数据表中的记录
作者:eygle
出处:http://blog.eygle.com
日期:February 22, 2005
« 自己动手,丰衣足食 | 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", commit 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 -- Commit 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 commit; 27 end loop; 28 commit; 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> commit; Commit complete. SQL> exec deleteTab('TEST','object_id >0','3000') Finished! Totally 19107 records deleted! PL/SQL procedure successfully completed. |
相关文章推荐
- 如何有条件的分步删除数据表中的记录
- 如何有条件的分步删除数据表中的记录
- 如何有条件的查询或删除表中的重复记录
- MySql-如何查询删除数据表重复记录
- mysql删除数据记录后如何使自动编号从1开始
- MySql-如何查询删除数据表重复记录
- 按某一字段分组取最大(小)值所在行的数据,如何按字段删除重复记录
- 处理查询、插入、删除等操作时,如何应对锁住的数据记录
- 如何删除数据表中重复的记录
- C#中如何解决sqlite数据表/记录删除后数据库内存不变的问题
- SAP BPC中Merge与replace&clear的区别以及如何删除数据为0的记录
- [数据恢复答疑]删除了WINDOWS桌面上的文件,该如何恢复数据
- 计算机常用知识之IE如何删除查询记录
- mysql 删除重复数据只保留一条记录
- Git如何删除历史记录中的大文件详解
- oracle多表关联删除数据表记录方法
- Java:如何从链表中删除重复数据
- qeephp 如何批量更新和删除记录?
- 如何删除一张表重复的记录?
- 在salesforce中如何利用data loader导入数据和删除数据(mac)