网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.对跨多个表格的数据组合时需要用.
.在数据库中建表时记录长度为什么.
.从三个不同的层次实现对数据库数.
.在控制中心点选数据库时出现的SQ.
.正确认识对象数据库与关系数据库.
.深入探讨数据仓库设计的步骤 禁忌.
.[sql server]存储过程事务.
.关于MSSQL占用过多内存的问题.
.教你快速掌握SQL语句各种写法的效.
.如何单独抽取SQL server 2000帮助.
.用SQL Server为Web浏览器提供图像.
.SQL Server 2008实现高可用性.
.SQL 在什么情况下使用全表扫描 .
.最详细的SQL注入相关的命令整理.
.如何转移SQL SERVER数据库.
.SQL Server自动生成日期加数字的.
.SQL server 2008邮件故障排除:发.
.将指定日期所在月份的所有日期按.
.用SQL数据库批量插入数据简介.
.sql server 2005中的DDL触发器.

用一个存储过程实现分步删除数据表记录

发表日期:2008-4-10


简介在实际的工作和学习中,我们需要分步删除数据表的一些记录,分批提交用以减少对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.

上一篇:快速解决日志文件满造成的无法写入问题 人气:1325
下一篇:数据库差异备份与增量备份的不同之处 人气:1598
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐