ITPub博客

首页 > 数据库 > Oracle > Oracle 中大批量删除数据的一种方法

Oracle 中大批量删除数据的一种方法

原创 Oracle 作者:lucyne 时间:2015-12-09 17:02:23 0 删除 编辑

大批量删除数据有几种方法,这里列举我们使用的一个方法,参考下面存储过程。
1.定义步长(可以使用rowid分片),每次删除多少提交
2.低峰时间进行操作
3.删除完休息多久

CREATE  PROCEDURE clear_ub(
  v_start NUMBER,
  v_end  NUMBER
) AS
  TYPE cn_type IS TABLE OF  VARCHAR2(100);
  l_start  NUMBER;
  cn_tab cn_type;
  CURSOR cur_data IS
 SELECT /*+ FIRST_ROWS(1000) */cn
   FROM (SELECT ud.cn, ROWNUM RN
           FROM (select cn from tt.USER_18MONTHS_20120607_INFO where cn is not null) ud
          WHERE ROWNUM < v_end)
  WHERE RN >= v_start;
BEGIN
  OPEN cur_data;
  LOOP
    FETCH cur_data BULK COLLECT INTO cn_tab LIMIT 1000;
    EXIT WHEN cn_tab.count = 0;
    DBMS_OUTPUT.put_line(cn_tab.count || ' rows');
    l_start := DBMS_UTILITY.get_time;
    FORall i IN cn_tab.first .. cn_tab.last
    delete from  tt.user_info where cn=cn_tab(i);
    commit;
    dbms_lock.sleep(3);
    DBMS_OUTPUT.put_line('Delete  : '||(DBMS_UTILITY.get_time - l_start));
  END LOOP;
  CLOSE cur_data;
END;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26390465/viewspace-1869182/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: In-Memory for Column
请登录后发表评论 登录
全部评论
. . 一个 DBA. . .

注册时间:2012-01-06

  • 博文量
    84
  • 访问量
    783162