暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在更短的时间内有效地更新每个表中有5L记录的循环表

askTom 2017-04-07
262

问题描述

嗨,汤姆,

我有一个场景,我需要一次更新这么多表 (大约80),每个表至少有5十万记录,我使用下面的方法。
它需要更多的时间 (不确切知道,因为它仍在运行超过一天)。

您能建议其他方法吗?或者我如何有效地进行以下更新?

CURSOR C_TABLES IS
      SELECT TABLE_NAME
        FROM ALL_TABLES
       WHERE TABLE_NAME LIKE '%Condtion%';

FOR REC_TAB IN C_TABLES LOOP
    
      V_SQL_STRING := 'SELECT TABLE_NAME.C1,
                       TABLE_NAME.C2,
                TABLE_NAME.C3,
                NVL(IRS.C4,''UNDEFINED'') SM
           FROM ' || REC_TAB.TABLE_NAME ||
                      ' TABLE_NAME, T2 IRS
          WHERE TABLE_NAME.C1= T2.C1
            AND TABLE_NAME.C2 BETWEEN IRS.C2 AND IRS.C3';
    
      OPEN Cursor FOR V_SQL_STRING;
    
      LOOP
        FETCH V_Cursor
          INTO V_C1, V_C2, V_C3, V_C4;
        EXIT WHEN V_Cursor%NOTFOUND;
      
        V_SQL_STRING := ' UPDATE ' || REC_TAB.TABLE_NAME ||
                        ' SET C3= ''' || V_C4|| '''
           WHERE C1= ''' || V_C1|| '''
           AND C2= ''' || V_C2|| '''
           AND C3= ''' || C_C3|| ''' ';
      
        EXECUTE IMMEDIATE V_SQL_STRING;
        ---DBMS_OUTPUT.PUT_LINE('Updated Table:' || REC_TAB.TABLE_NAME);
        COMMIT;
      END LOOP;    
END LOOP;
复制


提前谢谢 ..
Srinadh Tummala

专家解答

我们可以进行很多改进-但让我们从2个简单的改进开始,看看是否对您有足够的帮助。

1) 绑定变量

更改

V_SQL_STRING := ' UPDATE ' || REC_TAB.TABLE_NAME ||
                        ' SET C3= ''' || V_C4|| '''
           WHERE C1= ''' || V_C1|| '''
           AND C2= ''' || V_C2|| '''
           AND C3= ''' || C_C3|| ''' ';
      
        EXECUTE IMMEDIATE V_SQL_STRING;
复制




V_SQL_STRING := ' UPDATE ' || REC_TAB.TABLE_NAME ||
                        ' SET C3= :1 '||
           ' WHERE C1= :2'||
           ' AND C2= :3 '||
           ' AND C3= :4 ';
      
        EXECUTE IMMEDIATE V_SQL_STRING using v_c1, v_c2, v_c3, v_c4;
复制


2) 提交较少

更改

COMMIT;
      END LOOP;    
END LOOP;
复制




  END LOOP;    
  COMMIT;
END LOOP;
复制



If its still too slow, get back 到us and we'll have more for you.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论