sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 开发DBA >

【学习笔记】Oracle两表更新 利用rowid排序更新两张大表中的数据

时间:2016-07-09 22:48   来源:Oracle研究中心   作者:惜分飞   点击:

天萃荷净 利用rowid排序更新大表数据,现在有个案例,有一张很大的表t1,需要更新其中的一个列,然后这个列是参考另外一个表t2中的列

直接sql操作如:
update t1 ta set prov_code=(select area_code from t2 tb where ta.id=tb.id);

利用rowid,分批提交的思路写出如下sql,执行大表更新效率比较高

DECLARE
  CURSOR cur IS
    SELECT
     a.area_code, b.ROWID ROW_ID
      FROM t2 a, t1 b
     WHERE a.id = b.id
     ORDER BY b.ROWID;  
  V_COUNTER NUMBER;
BEGIN
  V_COUNTER := 0;
  FOR row IN cur LOOP
    UPDATE t1
       SET prov_code = row.area_code
     WHERE ROWID = row.ROW_ID;
    V_COUNTER := V_COUNTER + 1;
    IF (V_COUNTER >= 1000) THEN
      COMMIT;
      V_COUNTER := 0;
    END IF;
  END LOOP;
  COMMIT;
END;

这里利用了rowid排序,使得update操作是一个一个数据块的进行,减少逻辑读,分批提交减小undo压力


--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle两表更新 利用rowid排序更新两张大表中的数据

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/779.html

Oracle研究中心

关键词:

Oracle两张大数据表更新方法

利用rowid排序更新两张大表中的数据

将t1表中的一列更新t2表中的某列的SQL语句