快速批量更新数据

来源:互联网 发布:网络手游赚钱排行榜 编辑:程序博客网 时间:2024/06/06 02:55
生产环境有时候表结构变更,需要在新增字段设置默认值,为不长时间锁表,在add 字段时候不能加default * 需要后续做大批量数据变更,在我们的架构中,更新效率太低或是一个事务更新太多记录使OGG延时加剧,所以就有了下面这个批量更新模板。给大表新增字段需要注意事项,请参考 :大表新增字段set serveroutput on

declare v_cnt int := 0; TYPE ARRROWID IS TABLE OF ROWID INDEX BY BINARY_INTEGER; TBROWS ARRROWID; ROW PLS_INTEGER; CURSOR BACH_CUR IS SELECT ROWID ROW_ID FROM XHL.DELTEST where OWNER = 'XHL';BEGIN OPEN BACH_CUR; LOOP FETCH BACH_CUR BULK COLLECT INTO TBROWS limit 50000; /* 每次更新50000*/ FORALL ROW IN 1 .. TBROWS.COUNT() UPDATE PAYADM.DELTEST SET STATUS=1 WHERE ROWID = TBROWS(ROW); COMMIT; v_cnt := v_cnt + TBROWS.COUNT(); DBMS_LOCK.SLEEP(1); /* 休息一秒让OGG能缓过神来*/

EXIT WHEN BACH_CUR%NOTFOUND;

END LOOP; dbms_output.put_line('UPDATE SUCC:'||v_cnt); CLOSE BACH_CUR;END;/