欢迎来到天天文库
浏览记录
ID:46892444
大小:32.50 KB
页数:3页
时间:2019-11-28
《删除大量Oracle数据方法总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、删除大量Oracle数据方法总结 Oracle中删除超过50w条记录的数据,如果直接使用delete,效率就严重受到了影响。那么首先我们需要了解对于这个表的数据,我们到底是全部删除,还是部分删除。这里有三个关键字我们需要注意:truncate,delete,drop。 全部删除,不保留数据结构就直接drop最好。如果是部分删除,一般就这样一些办法: 1.如果删除的数据是大部分,分段提交删除的数据。createorreplaceproceduredelete_tableisinumber(10);be
2、gin forxin(select*fromempwhereDEPTNOlike‘a%’) loop deleteempwhereemp.id=x.idi:=i+1; ifi>1000then commit; i:=0; endif; endloop;exceptionwhenothersthendbms_out.put_line(sqlcode);rollback;enddelete_table; 或者–每500条数据提交一次DECL
3、ARECNTNUMBER(10):=0;INUMBER(10);BEGINSELECTCOUNT(*)INTOCNTFROMep_arrearage_bakWHERETO_CHAR(DF_DATE,‘MM’)=’01′;FORIIN1..TRUNC(CNT/500)+1LOOPDELETEFROMep_arrearage_bakWHERETO_CHAR(DF_DATE,‘MM’)=’01′ANDROWNUM<=500;COMMIT;ENDLOOP;END; 2、把要保留的数据放在一个临时表里,trunc
4、atetable原表后再放回来;createtablet_backasselect*fromtwhere….droptablet;renamet_backtot; 3.专门使用一个大回滚段,比如定义:undotablespace2G 4、如果将方法1做一点修改,可以这么做:有条件的分步删除数据表中的记录 –创建测试表createtabletestasselect*fromdba_objects;–创建删除表的存储过程 createorreplaceproceduredeleteTab–插入语句
5、SQL>insertintotestselect*fromdba_objects;6374rowscreated.SQL>/6374rowscreated.SQL>/6374rowscreated.SQL>commit;–创建删除的存储过程createorreplaceproceduredeleteTab/** **Usage:runthescripttocreatetheprocdeleteTab ** inSQL*PLUS,type"execdeleteTab(‘Foo’,'ID>
6、=1000000′,’3000′);" ** todeletetherecordsinthetable"Foo",commitper3000records. ** Conditionwithdefaultvalue’1=1′anddefaultCommitbatchis10000. **/ (p_TableNameinvarchar2, –TheTableNamewhichyouwanttodeletefrom p_Conditioninvarchar2def
7、ault’1=1′, –Deletecondition,suchas"id>=100000" p_Countinvarchar2default’10000′ –CommitafterdeleteHowmanyrecords) aspragmaautonomous_transaction; n_deletenumber:=0; begin while1=1loop EXECUTEIMMEDIATE ‘deletefrom‘
8、
9、p_TableName
10、
11、‘wher
12、e‘
13、
14、p_Condition
15、
16、‘andrownum<=:rn’ USINGp_Count; ifSQL%NOTFOUNDthenexit; else n_delete:=n_delete+SQL%ROWCOUNT; endif; commit; endloop; commit; DBMS_OUTPUT.PUT_LINE(‘Finished!’); D
此文档下载收益归作者所有