网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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教程,数据库安全,数据库文摘
本月文章推荐
.SQL高手篇:精妙SQL语句介绍.
.在SQL Server中快速删除重复记录.
.MS SQL SERVER2005 XML 最佳实践.
.SQL Server2000数据库文件损坏时.
.个人经验总结:处理海量数据的经.
.SQL2005中部署.net 3DES加密函数.
.SELECT查询的应用(二).
.解决SqlTransaction用尽的问题(.
.以前编写Like谓词被忽略的使用方.
.全文本检索的应用(1).
.远程连接SQL Server 2000服务器的.
.未与信任SQL Server连接相关联的.
.全文本检索的应用(3).
.log4net和SQL Server 2000.
.教你轻松掌握一个纵表转横表的"S.
.实例讲解分区表的可用性及相关错.
.深入探讨纯软件方式的双机热备解.
.如何恢复/修复SQL Server的MDF文.
.Sql Server2005登录失败.
.创建一个表时表中列的顺序对性能.

sql分段处理删除大量数据

发表日期:2007-7-7


 最近在QQ群里面,有人问起如何使用分段处理,竟然忘记如何操作,当时只是COPY一本书里的内容,只记得大致的步骤,先重新温习,以便记忆:

实现功能:

1.分段处理

2.拆分操作

3.批量绑定

--摘自《Oracle 数据库性能优化》

CREATE OR REPLACE PROCEDURE del_hubel_SSF_forall
as
 type ridArray is table of rowid index by binary_integer;
 type dtArray is table of varchar2(50) index by binary_integer;
 
 v_rowid ridArray;
 v_mid_to_delete dtArray;
BEGIN
 SELECT mid, rowid bulk_collect into v_mid_to_delete, v_rowid from temp_mid_hubei_bak WHERE ROWNUM<10001;
 FORALL i in 1.. v_mid_to_delete.COUNT
  DELETE FROM  SSF WHERE mid=v_mid_to_delete(i);
  --DBMS_OUTPUT_LINE(TO_CHAR(v_mid_to_delete.COUNT) || ' records deleted from hubei_SSF !!!');
   FORALL i in i .. v_rowid.COUNT
    DELETE FROM temp_mid_hubei_bak WHERE ROWID=v_rowid(i);
  --DBMS_OUTPUT_LINE(TO_CHAR(v_mid_to_delete.COUNT) || ' records deleted from hubei_SSF !!!');
END;


CREATE OR REPLACE PROCEDURE exec_forall
(
 p_RowCount in number,   --Total need to delete rows count
 p_ExeCount in number
)
AS
 n_RowCount number:=0;
 n_ExeTimes number:=0;
 n_Delete number:=0;
BEGIN
 n_RowCount :=p_RowCount;
 
 WHILE n_RowCount>0
 LOOP
  EXECUTE IMMEDIATE 'begin del_hubei_SSF_forall; end;';
  COMMIT;
 
  IF n_RowCount>p_ExeCount THEN
   n_RowCount:=n_RowCount-p_ExeCount;
   n_ExeTime:=n_ExeTimes+1;
  ELSE
   n_ExeTimes :=n_ExeTimes+1;
   n_Delete:=RowCount;
   n_RowCount:=n_RowCount-p_ExeCount;
  END IF;
  --DBMS_OUTPUT_LINE('----------------' || TO_CHAR(n_ExeTimes) || '--------------');
  n_delete :=n_delete+p_ExeCount*(n_ExeTimes-1);
  END LOOP;
  --DBMS_OUTPUT_LINE('Full Finished!!!');
  --DBMS_OUTPUT_LINE('Totally' || TO_CHAR(n_delete) || 'records deleted. !!!');
END;

上一篇:精讲sql server数据库备份多种方法 人气:3314
下一篇:Win2003系统安装SQL Sever2000后1433端口未开放的解释 人气:6093
浏览全部sql分段处理的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐