oracle 批量删除表数据的几种方法_oracle

来源:脚本之家  责任编辑:小易  

怎么删除oracle表中的抄全部数据袭删除表内容的bai两种方法truncate table 表名;dudelete from 表名 where 条件;两种方法的zhi区别:truncate,意思dao为截断表,能够不占用资源的全部删除表,优点是速度快,缺点是删除不能恢复,不能按条件删除。delete,意思为删除,此操作占用redolog,优点能够快速恢复和选择删除,缺点是删除慢,大批量的删除不建议使用www.zgxue.com防采集请勿采集本网。

1.情景展示

一个游标加一个 execute immediate 就可以具体我给你写出来吧 --@author WFQ declare v_sql varchar2(2000) ; CURSOR cur is select table_name from user_tables order by table_name ; begin for rows in cur loop v_sql := 'TRUNCATE TABLE '

  情景一:

你的问题太笼统,没法给出具体方案。 测试数据,随便处理。 生产库数据,如果不是垃圾数据,建议不删除,可以新建表将历史数据存储起来,对当前表的数据再删除。 我的邮箱 taoxin_yijiu@126.com,有问题可以给我发邮件

  删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据

如果是全表删除可以用truncate; 让然也可以把表结构复制出来,然后drop,在执行一次刚刚复制出来的ddl语句重建表就好了 如果是分区表,那么可以直接对分区进行truncate和drop操作

  情景二:

先写一个sql文件,比如叫del_tables.sql,在sql文件里写DROP TABLE的命令(DROP的内容根据你的需要,可以是单独的多个DROP TABLE指令,也可能是从USER_TABLES里查询出若干表名),然后bat文件里写 sqlplus 用户名/密码@库名 @del_tables.sql 如

  删除VIRTUAL_CARD_TEST表中的脏数据

删除表的数据有很多种方法,如果是只删除某一特定的部分,用delete语句 delete from 表名 where 条件; 如果是全表删除可以用delete和truncate delete from 表名; 或者用 truncate table 表名; 二者都能达到清空表的目的,区别是delete 记录日志

2.解决方案

  情景一的解决方案: 

DELETE FROM PRIMARY_INDEX_TEST WHERE MINDEX_ID IS NULL

  情景二的解决方案:

  方案1:使用快速游标法(删除一次提交一次);

--快速游标法BEGIN FOR TEMP_CURSOR IN (SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '*') > 0 UNION SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '#') > 0 UNION SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '/') > 0 UNION SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '+') > 0 UNION SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '!') > 0 UNION SELECT ID FROM VIRTUAL_CARD3 WHERE INSTR(NAME, '.') > 0) LOOP /* LOOP循环的是TEMP_CURSOR(逐条读取TEMP_CURSOR) */ DELETE FROM VIRTUAL_CARD3 WHERE VIRTUAL_CARD3.ID = TEMP_CURSOR.ID; COMMIT; --提交 END LOOP;END;

  执行时间:

  方案2:更多游标使用方法,见文末推荐;

  方案3:使用存储过程按id进行逐条删除。

CREATE OR REPLACE PROCEDURE DELETE_TABLE_BATCH(V_ROWS IN NUMBER /*删除多少条数据后进行提交*/) IS /** * 内容: * 日期:2018/12/05 * 作者:Marydon * 版本:1.0 */ I NUMBER(10); --声明变量,用于记录次数BEGIN FOR TEMP_TABLE IN (SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '*') > 0 UNION SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '#') > 0 UNION SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '/') > 0 UNION SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '+') > 0 UNION SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '!') > 0 UNION SELECT ID FROM VIRTUAL_CARD_TEST WHERE INSTR(NAME, '.') > 0) LOOP /* LOOP循环的是TEMP_TABLE(逐条读取TEMP_TABLE) */ DELETE VIRTUAL_CARD_TEST WHERE VIRTUAL_CARD_TEST.ID = TEMP_TABLE.ID; I := I + 1; --删除一次,+1 IF I >= V_ROWS THEN COMMIT; --提交 I := 0; --重置 END IF; END LOOP;EXCEPTION /* 输出异常信息 */ WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('异常编号:' || SQLCODE); DBMS_OUTPUT.PUT_LINE('异常信息:' || SQLERRM); ROLLBACK; --回滚END DELETE_TABLE_BATCH;

  创建并运行该存储过程

  删除16522条数据,用了6分21秒,比方式一慢太多了。 

  方案4:

  将要保留的数据插入到新表

--将要保留的数据插入到新表CREATE TABLE VIRTUAL_CARD_TEMP2 AS(SELECT * FROM VIRTUAL_CARD2 WHERE INSTR(NAME, '*') = 0 AND INSTR(NAME, '#') = 0 AND INSTR(NAME, '/') = 0 AND INSTR(NAME, '+') = 0 AND INSTR(NAME, '!') = 0 AND INSTR(NAME, '.') = 0)

  删除原来的表

--删除原表drop table VIRTUAL_CARD2

  将新建的表进行重命名成删除表的名称。

  说明:原来的表有过存在外键约束等关系时,并没有进行测试,因为该表没有索引之类东西,自己测试的时候一定要慎重!!!

  方案5:使用in函数

DELETE FROM VIRTUAL_CARD_TEMP WHERE ID_CARD IN (SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '*') > 0                   UNION                   SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '#') > 0                   UNION                   SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '/') > 0                   UNION                   SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '+') > 0                   UNION                   SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '!') > 0                   UNION                   SELECT T1.ID_CARD                     FROM VIRTUAL_CARD_TEMP T1                    WHERE INSTR(T1.NAME, '.') > 0)

  说明:ID_CARD字段必须具有唯一性。 

以上就是oracle 批量删除表数据的几种方法的详细内容,更多关于oracle 批量删除表数据的资料请关注真格学网其它相关文章! 您可能感兴趣的文章:oracle数据库的删除方法详解Oracle删除数据报ORA 02292错误的巧妙解决方法oracle 数据按主键删除慢问题的解决方法Oracle删除重复的数据,Oracle数据去重复Oracle数据库中的级联查询、级联删除、级联更新操作教程Oracle误删除表数据后的数据恢复详解彻底删除Oracle数据库的方法oracle查询重复数据和删除重复记录示例分享oracle数据库添加或删除一列的sql语句

建立分区,将需要删除的数据存在特定分区里,删除该分区就可以了。 alter table 表名 drop partition 分区名 ; 应该很快,truncate  table table_name本回答被提问者采纳,用truncate命令,truncate table table_name ;内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • oracle 11g自动诊断信息库(automatic diagnostic repository,ad
  • oracle应用经验(2)
  • oracle开发之分析函数总结
  • 一些oracle数据库中的查询优化建议综合
  • oracle12c图形化&静默安装踩坑的方法步骤
  • oracle em 按钮乱码解决办法及em网页变成英文
  • oracle 分页问题解决方案
  • oracle性能究极优化
  • oracle不能使用em怎么办 oracle11g如何正确安装配置em
  • 关于oracle多表连接,提高效率,性能优化操作
  • oracle 怎样快速删除一个表中全部的数据
  • 怎么删除oracle表中的全部数据
  • oracle如何快速删除一个大表中的部分数据
  • 如何批量删除oracle数据库中表?
  • Oracle如何批量清空所有表数据
  • oracle 表数据太多怎么删除
  • oracle 怎样快速删除一个表中全部的数据
  • 如何批量删除oracle数据库中表?
  • oracle怎么删除一张表的数据
  • oracle怎么清除表全部数据
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页oracle数据库的删除方法详解oracle删除数据报ora 02292错误的巧妙解决方法oracle 数据按主键删除慢问题的解决方法oracle删除重复的数据,oracle数据去重复oracle数据库中的级联查询、级联删除、级联更新操作教程oracle误删除表数据后的数据恢复详解彻底删除oracle数据库的方法oracle查询重复数据和删除重复记录示例分享oracle数据库添加或删除一列的sql语句oracle 11g自动诊断信息库(automatic diagnostic repository,adoracle应用经验(2)oracle开发之分析函数总结一些oracle数据库中的查询优化建议综合oracle12c图形化&静默安装踩坑的方法步骤oracle em 按钮乱码解决办法及em网页变成英文oracle 分页问题解决方案oracle性能究极优化oracle不能使用em怎么办 oracle11g如何正确安装配置em关于oracle多表连接,提高效率,性能优化操作oracle 查看表空间的大小及使用情linux系统(x64)安装oracle11g完oracle数据库下载及安装图文操作oracle存储过程基本语法介绍oracle 10g 安装教程[图文]oracle 如何查询被锁定表及如何解基于ora-12170 tns 连接超时解决oracle数据库tns配置方法详解oracle中to_date详细用法示例(ororacle 创建表空间详细介绍查找oracle数据库表中是否存在系统关键字oracle 配置远程访问教程oracle minus用法详解及应用实例修改oracle密码有效期限制的两种思路详解oracle数据库下载及安装图文操作步骤oracle数据库升级或数据迁移方法研究oracle 配置邮件服务器操作示例oracle11g完全卸载的详细步骤(超管用)oracle数据库使用sqlplus时的连接错误与方oracle 中 table 函数的应用浅析
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved