代码编织梦想

oracle 大表删除数据,保留部分数据(一般以时间来限制,最好时间有索引这样更方便)

一:简单

begin   /*开始*/
    loop    --循环执行


         delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<=5000;
        
         --没有记录时退出
         exit when sql%notfound;
         commit;    /*记住每次要提交*/
    end loop;
end;
/        --反斜杠表示程序执行

**********************************************************

二:复杂

 round_int设置循环的执行的次数,修改执行删除的语句。

返回:每次删除的行及删除的总行数

SET SERVEROUTPUT ON; --输出信息默认是关闭,要先打开在sqlplus中才看得到DBMS_OUTPUT.PUT_LINE的输出。


declare
    round_int number:=5;  --执行5次,设置执行的次数

    v_num number:=0;  --本次执行的行数
    v_sum number:=0;  --行数加总

    i number:=1;          --循环基数,从1开始
BEGIN

loop
    --控制删除次数
    IF not i<=round_int THEN
        exit;  --退出循环
    END IF;

        --删除语句

   delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<=5000;
   
      
    v_num := sql%rowcount; --得到本次执行的记录数
    v_sum :=v_sum +v_num; --合计
    
    --输出本次记录
    dbms_output.put_line('DELETE ROWS:' || v_num);

    exit when sql%notfound;  --无数据退出

    commit; /*记住每次要提交*/

    i:=i+1;

end loop;
    --输出合计
    DBMS_OUTPUT.PUT_LINE('DELETE ALL ROWS:' || v_sum);
END;
/

*****************************************************************************

三,用存储过程来删除

CREATE OR REPLACE
PROCEDURE "delete_rows" (round_int IN NUMERIC DEFAULT '0')
AS
    v_num number:=0;  --本次执行的行数
    v_sum number:=0;  --行数加总

    i number:=1;          --循环次数
BEGIN

loop
    --控制删除次数
    IF not i<=round_int THEN
        exit;  --退出循环
    END IF;

   delete from USER_PAY_CASH_SUM where GET_DATE< to_date('2018-01-01','YYYY-MM-DD') and rownum<100;
   
      
    v_num := sql%rowcount; --得到本次执行的记录数
    v_sum :=v_sum +v_num; --合计
    
    --输出本次记录
    dbms_output.put_line('DELETE ROWS:' || v_num);

    exit when sql%notfound;

    commit; /*记住每次要提交*/

    i:=i+1;

end loop;
    --输出合计
    DBMS_OUTPUT.PUT_LINE('DELETE ALL ROWS:' || v_sum);
END;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44265429/article/details/129674580

oracle删除表中大量数据卡顿的解决办法_彼得 潘的博客-爱代码爱编程_oracle删除大量数据卡死

首先,不要被标题误导,分两种情况。 1. 删之前原表数据不要。 2. 删之前保留原表数据。 一. 正确姿势 oracle数据表有过万条数据后,删除数据就变的特别慢,有时甚至会卡死,所以在此分享一个小白操作,

oracle大数据量删除方案-爱代码爱编程

oracle进行大数据量删除的时候,容易报错表temp表空间空间不够导致删除失败,此时的处理方案有: 方案一: 分批删除,提交之后继续执行 方案二: 当剩下的数据量小于待删除的数据量时,可以使用转表的方式来实现。这里重点介绍转表的方案。 步骤一、导出表结构 进入PL/SQL DEVELOPER【工具】-【导出用户对象】,选择表所属的模式,选择表

mysql快速删除大表数据部分数据_SQL Server大表如何快速删除数据-爱代码爱编程

在SQL Server中,如何快速删除大表中的数据呢?回答这个问题前,我们必须弄清楚上下文环境和以及结合实际、具体的需求,不同场景有不同的应对方法。 1: 整张表的数据全部删除 如果是整张表的数据全部清空、删除,这种场景倒是非常简单,TRUNCATE TABLE肯定是最快的。 反而用DELETE处理的话,就是一个糟糕的策略。 2: 大表中删除一部

oracle 怎么清空数据表,oracle怎么清空表数据,oracle清空数据库-爱代码爱编程

oracle怎么清空表数据甲骨文怎么清空表数据,Oracle清除表数据的方法:可以使用【删除表_名称;]或[Truncate[table]table _ name;】语句清空整个表数据。 本文的操作环境:windows10系统,oracle 11.2.0.1.0,thinkpad t480计算机。 (学习视频分享:编程入门) 具体方法: 当

oracle使用游标批量删除数据,oracle 批量删除表数据的4种方式-爱代码爱编程

1.情景展示 情景一: 删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据 情景二: 删除VIRTUAL_CARD_TEST表中的脏数据 2.解决方案 情景一的解决方案: DELETE FROM PRIMARY_INDEX_TEST WHERE MINDEX_ID IS NULL 情景二的解决方案

oracle按时间删除表中数据,oracle 批量删除表数据的几种方法-爱代码爱编程

1.情景展示 情景一: 删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据 情景二: 删除VIRTUAL_CARD_TEST表中的脏数据 2.解决方案 情景一的解决方案: DELETE FROM PRIMARY_INDEX_TEST WHERE MINDEX_ID IS NULL 情景二的解决方案: 方案1

oracle表释放空块,oracle 大表删除数据后,回收空间的问题。-爱代码爱编程

在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理。 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据。我们可以把需要保留的数据转移到别的表,然后再把大表drop掉,然后改名就行了; a) create table tablename_min as select * from tablename_m

oracle删除大表中一部分数据,删除大量Oracle数据方法总结-爱代码爱编程

删除大量Oracle数据方法总结 Oracle中删除超过50w条记录的数据,如果直接使用delete,效率就严重受到了影响。那么首先我们需要了解对于这个表的数据,我们到底是全部删除,还是部分删除。这里有三个关键字我们需要注意:truncate,delete,drop。 全部删除,不保留数据结构就直接drop最好。如果是部分删除,一般就这样一些办法:

Oracle删除数据消耗时间大吗,oracle 删除大量数据的方法-爱代码爱编程

如果全表删除直接用truncate table tabl1;就可以了,如果是需要根据条件删除,正常是用delete方法进行删除,但这样删除由于要写日志(用nologging方法对delete方法无效),数据量大了会非常的慢,所以可以参照下面的方法来进行。 我的步骤是(下边操作都是在plsql中运行的) 1、首先 将这个月的数据导出到一个临时表中(这

oracle删除重复数据只保留一条_戈壁楼兰的博客-爱代码爱编程

问题描述 merge数据时,找不到唯一的源数据,需要先删除有重复的数据,只保留一条 解决方式 --查找表中多余的重复记录(多个字段) select * from tmp a where (a.料号,a.分类码) in

oracle:删除表数据的重复记录,并保留一条-爱代码爱编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、删除重复数据的方法二、oracle代码总结 前言 某些数据是手工录入数据库的,所以经常会产生重复的数据,这时就需要删除多余的数据 提示:以下是本篇文章正文内容,下面案例可供参考 一、删除重复数据的方法 删除重复数据的写法有很多种

oracle删除数据只保留时间最早和最新的数据_oracle 保留时间最近一条记录其他都删除-爱代码爱编程

以学生表为例 insert into Student01 values('01' , '赵雷' , to_date('1990-01-01','yyyy-mm-dd'), '男'); insert into Student01 values('02' , '钱电' , to_date('1990-12-21','yyyy-mm-dd'), '男');