简单范例

create or replace procedure delete_table
is
i 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;

  Oracle中删除超过50w条记录的数据,如果直接使用delete,效率就严重受到了影响。那么首先我们需要了解对于这个表的数据,我们到底是全部删除,还是部分删除。这里有三个关键字我们需要注意:truncate,delete,drop,他们之间的异同点可以参考这篇文章——truncate,delete,drop的异同点

  全部删除,不保留数据结构就直接drop最好。如果是部分删除,一般就这样一些办法:

  1. 如果删除的数据是大部分,分段提交删除的数据。

create or replace procedure 
delete_table is i 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′ ANDROWNUM<=500; 
COMMIT
END LOOP; 
END;

  2、把要保留的数据放在一个临时表里,truncate table原表后再放回来;

create table t_back as select * from t where ….
drop table t;
rename t_back to t;

  3. 专门使用一个大回滚段 ,比如定义:undo tablespace 2G

  4、如果将方法1做一点修改,可以这么做:

有条件的分步删除数据表中的记录

–创建测试表 
create table test as select * from dba_objects;

–创建删除表的存储过程  
create or replace procedure deleteTab

–插入语句    
SQLinsert into test select * from dba_objects; 
6374 rows created. 
SQL> / 6374 rows created. 
SQL> / 6374 rows created. 
SQLcommit
– 创建删除的存储过程 
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;   /

–执行语句 
SQLexec deleteTab(‘TEST’,‘object_id >0′,’10000′)

java_Oralce的更多相关文章

随机推荐

  1. TestNG官方文档中文版(2)-annotation(转)

    1. 介绍    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...

  2. C#调用C++导出类(转)

    由于使用别人的Dll,导出的是一个实体类,在C#里封送很难,百度下,有个朋友回复一篇英文的,虽然不一定使用,但可以作为一个知识点,现把原文贴下: c#调用C++写的dll导出类,包含继承,重载等详细介 ...

  3. SSH无法连接服务器

    服务器版本如下: @kelWEB4:/etc# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd ...

  4. 利用ASP.NET MVC源代码调试你的应用程序[转]

    由于项目需要,最近学起asp.net mvc.昨天遇到ViewData和TempData他们之间的分别这样让我纠结的问题.有园友强烈建议我去看ASP.NET MVC的源代码.所以,我想到如何在调试AS ...

  5. Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形

    来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...

  6. Winxp下搭建SVN服务器

    本文介绍一种在winxp下搭建SVN服务器的方法. (1) 需要下载Slik-Subversion和TortoiseSVN两个软件.我使用的版本是Slik-Subversion-1.8.3-1-win ...

  7. OpenJDK与JDK的区别及Ubuntu下的安装方法

    OpenJDK与JDK的区别: OpenJDK是JDK的开放原始码版本,以GPL协议的形式放出.两者的授权协议的不同,且在采用GPL协议的OpenJDK中,SUNJDK的一部分源代码因为产权的问题无法 ...

  8. 怎么利用SQL语句查询数据库中具体某个字段的重复行

    select * from [tablename] group by SeriNohaving count(SeriNo)<>1

  9. 设置mysql 在mac中的环境变量

    在mac os的用户目录下有一个隐藏文件.bash_profile,编辑它就可以完成环境变量的创建. 比如要将mysql的运行目录加到环境变量中,可以在.bash_profile中新增如下一行: ex ...

  10. 各个版本spring的jar包以及源码下载地址

    各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.1.2,留存备用: http://maven.springframework.org/release/org/spring ...