`
javayestome
  • 浏览: 1050960 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

作者: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.


很简单,但是想来也有人可以用到。
分享到:
评论

相关推荐

    数据挖掘取样方法研究 (2).pdf

    在当今信息时代,数据挖掘已经成为了计算机科学中的一个重要分支,它从大量数据中提取或“挖掘”有价值的信息。在这个过程中,取样方法是不可或缺的一步。取样方法不仅有助于提高数据处理的效率,还能帮助研究者在...

    SQL_入门级范例_游标_触发器_多表联查_事物

    在实际应用中,游标可能用于分步处理大量数据,例如批量发送邮件或执行复杂的业务逻辑。触发器可以用来确保数据质量,比如在用户插入新记录时检查其格式或范围。多表联查则常用于报表生成和数据分析,将来自多个来源...

    SQL必备文档

    例如,`SELECT * FROM table_name`将返回表中的所有记录。通过添加`WHERE`子句,可以设置条件来筛选特定的记录。 2. 数据操纵:SQL提供了对数据库进行插入、更新和删除操作的能力。`INSERT INTO`用于添加新记录,`...

    SQL查询语句大全

    - `DELETE`:从数据库表中删除数据行,可以按特定条件删除。 - `UPDATE`:更新数据库表中的数据,允许你修改现有记录的值。 2. 数据定义: - `CREATE TABLE`:创建一个新的数据库表,定义表的结构,包括列名、...

    sqlserver语法实例大全(完整版)

    4. **数据删除**:`DELETE FROM`语句用于删除表中的行,可以结合`WHERE`子句限定删除条件。注意,不加条件会删除所有数据。 5. **联接操作**:通过`JOIN`关键字,可以将多个表的数据关联起来,如`INNER JOIN`、`...

    使用Oracle 移植工作台从 Microsoft SQL Server 移植到 Oracle 数据.docx

    - **自定义Oracle模型**:调整数据类型映射、删除不必要的表空间等,以满足特定的需求。 - **执行迁移**:将表空间、用户及用户表移植到目标数据库中,并使用SQL\*Loader将数据加载到新的环境中。 #### 六、注意...

    Oracle官方文档合集-SQL参考手册

    3. 插入、更新与删除数据:INSERT用于向表中添加数据,UPDATE用于修改现有记录,而DELETE则用于移除记录。了解这些基本操作是数据库管理的基础。 4. 查询数据:SELECT语句是SQL中最常用的命令,用于从一个或多个表...

    Access2010

    掌握查询技术不仅有助于数据查找,还能提升数据维护的效率,比如更新记录、删除重复项等。 ### 小结 《Access2010》一书涵盖了从基础知识到高级技巧的广泛内容,旨在帮助初学者和有经验的用户充分挖掘Access2010的...

    word邮件合并功能.doc

    邮件合并收件人窗口会列出所有数据,用户可以根据需要勾选或取消勾选收件人,或者直接在Excel中删除不需要的记录。最后,点击“确定”完成数据源的链接。 完成上述步骤后,用户可以预览和编辑合并后的结果,添加或...

    游标的应用

    游标在实际应用中,常常用于循环处理、条件判断等复杂逻辑,比如逐个处理结果集中的每一行进行更新或插入其他表。然而,由于其对系统资源的消耗,应尽量避免在性能敏感的代码中过度使用游标,尤其是大数据量的操作。...

    salesforce crm中文手册

    - **批量删除数据**:当需要清理过期或无效的信息时,可以一次性删除多条记录。 - **自定义Salesforce** - **自定义概述**:介绍如何根据实际需求调整界面布局和功能模块。 - **自定义个人显示设置**:允许用户...

    MyBatis技术文档.pdf

    - **删**: 删除数据库中的记录。 - **改**: 更新数据库中的记录。 - **查**: 查询数据库中的记录。 - 上述操作通常通过定义 SQL 语句并调用相应的 Mapper 方法来实现。 #### 五、MyBatis获取参数值的两种方式 1. **...

    智慧消防管理平台建设研究.docx

    例如,报警方案管理功能允许添加、删除和修改报警方案,根据特定条件查询,而数据查询功能则提供历史数据和视频记录的检索,便于分析和回溯。 综上所述,智慧消防管理平台通过科技手段提升了消防工作的效率和效果,...

    endnoteX3中文使用教程

    - 说明了如何将图像文件插入到文献记录中作为附件。 - **在参考文献中插入图表档案**: - 介绍了如何添加图表作为参考文献的一部分。 #### 第五章:搜寻在线资料库 - **选择连线资料库**: - 列出了常用的在线...

    2009年下半年信息系统项目管理师上午试题(含答案)

    在数据库设计的范式理论中,随着范式级别的提高,数据冗余减少,数据的稳定性和一致性增强,但可能导致更多的表和更复杂的查询,可能影响数据库性能。 类之间的关系中,关联、依赖和泛化都是常见的关系,而创建通常...

    PostgreSQL慢SQL调优手册

    将复杂的数据定义拆分成更小的操作,例如,分步创建表、添加列和索引。 10、**Comprehensive Optimization** 全面优化包括但不限于上述技术,还包括检查查询执行计划,分析慢查询日志,调整系统参数,以及使用性能...

    Mybatis入门到实践.pdf

    为数据库表中的每一列对应创建一个 JavaBean 类,用于存放数据库记录的数据。 ##### 2.5 创建 MyBatis 全局配置文件 MyBatis 的全局配置文件主要用于配置数据源、事务管理、缓存策略等。该配置文件通常命名为 ...

    赫优讯智能网关netTAP_NT_151-RE-RE_UM_用户手册.pdf

    这部分内容还提供了实施操作前的先决条件和分步操作指导。 手册中的一个重要章节是关于设备状态指示灯(LEDs)的说明。各个LED灯的功能和状态含义,包括系统LED灯(SYS LED)、应用LED灯(APL LED)以及实时以太网...

    SQL Server游标的介绍与使用

    以下是一个创建并使用游标的示例,假设我们有一个名为`tableA`,并且想要将`tableA`的数据复制到另一个表`tableB`中: ```sql DECLARE @paraA nvarchar(50), @paraB nvarchar(50), @paraC nvarchar(50); DECLARE ...

    mysql中You can’t specify target table for update in FROM clause错误解决方法

    上述SQL尝试删除`tbl`表中某些条件下的行,但错误在于它试图在一个DELETE语句中使用相同的表进行嵌套的SELECT查询。MySQL不允许这种操作。 解决此错误的方法是使用子查询或临时表。例如,可以将原查询改写为以下...

Global site tag (gtag.js) - Google Analytics