删除大量Oracle数据方法总结

删除大量Oracle数据方法总结

ID:46892444

大小:32.50 KB

页数:3页

时间:2019-11-28

删除大量Oracle数据方法总结_第1页
删除大量Oracle数据方法总结_第2页
删除大量Oracle数据方法总结_第3页
资源描述:

《删除大量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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。