oracle 批量删除表数据的2种方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle 批量删除表数据的2种方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1828字,纯文字阅读大概需要3分钟。
内容图文
![oracle 批量删除表数据的2种方式](/upload/InfoBanner/zyjiaocheng/1247/db1d0769db3b4f4eab0a6637fe5bce9b.jpg)
1.情景展示
情景一:
删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据
情景二:
删除VIRTUAL_CARD_TEST表中的脏数据
2.解决方案
情景一的解决方案:
DELETE FROM PRIMARY_INDEX_TEST WHERE MINDEX_ID ISNULL
情景二的解决方案:
分析:情景二无法使用情景一那样,where后面直接加条件,只能根据主键来进行删除。
方案1:使用存储过程按id进行逐条删除。
1 CREATE OR REPLACE PROCEDURE DELETE_TABLE_BATCH(V_ROWS INNUMBER/*删除多少条数据后进行提交*/) IS 2/** 3 * 内容: 4 * 日期:2018/12/05 5 * 作者:Marydon 6 * 版本:1.0 7*/ 8 I NUMBER(10); --声明变量,用于记录次数 9BEGIN10FOR TEMP_TABLE IN (SELECT ID 11FROM VIRTUAL_CARD_TEST 12WHERE INSTR(NAME, ‘*‘) >013UNION14SELECT ID 15FROM VIRTUAL_CARD_TEST 16WHERE INSTR(NAME, ‘#‘) >017UNION18SELECT ID 19FROM VIRTUAL_CARD_TEST 20WHERE INSTR(NAME, ‘/‘) >021UNION22SELECT ID 23FROM VIRTUAL_CARD_TEST 24WHERE INSTR(NAME, ‘+‘) >025UNION26SELECT ID 27FROM VIRTUAL_CARD_TEST 28WHERE INSTR(NAME, ‘!‘) >029UNION30SELECT ID 31FROM VIRTUAL_CARD_TEST 32WHERE INSTR(NAME, ‘.‘) >0) LOOP 33/* LOOP循环的是TEMP_TABLE(逐条读取TEMP_TABLE) */34DELETE VIRTUAL_CARD_TEST WHERE VIRTUAL_CARD_TEST.ID = TEMP_TABLE.ID; 35 I := I +1; --删除一次,+136IF I >= V_ROWS THEN37COMMIT; --提交38 I :=0; --重置39ENDIF; 40END LOOP; 41EXCEPTION 42/* 输出异常信息 */43WHEN OTHERS THEN44 DBMS_OUTPUT.PUT_LINE(‘异常编号:‘|| SQLCODE); 45 DBMS_OUTPUT.PUT_LINE(‘异常信息:‘|| SQLERRM); 46ROLLBACK; --回滚47END DELETE_TABLE_BATCH;
创建并运行该存储过程
删除16522条数据,用了6分21秒,比方式一慢太多了。
方案2:
将要保留的数据插入到新表
1 -- 将要保留的数据插入到新表 2 CREATE TABLE VIRTUAL_CARD_TEMP2 AS( 3SELECT* 4FROM VIRTUAL_CARD2 5WHERE INSTR(NAME, ‘*‘) =0 6AND INSTR(NAME, ‘#‘) =0 7AND INSTR(NAME, ‘/‘) =0 8AND INSTR(NAME, ‘+‘) =0 9AND INSTR(NAME, ‘!‘) =010AND INSTR(NAME, ‘.‘) =0)
删除原来的表
-- 删除原表 drop table VIRTUAL_CARD2
将新建的表进行重命名成删除表的名称。
说明:原来的表有过存在外键约束等关系时,并没有进行测试,因为该表没有索引之类东西,自己测试的时候一定要慎重!!!
原文:https://www.cnblogs.com/Marydon20170307/p/10072539.html
内容总结
以上是互联网集市为您收集整理的oracle 批量删除表数据的2种方式全部内容,希望文章能够帮你解决oracle 批量删除表数据的2种方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。