大表更新方法--使用rowid

来源:互联网 发布:刀路模拟软件 编辑:程序博客网 时间:2024/05/18 02:59

创建测试表

Create table test_gel (id number,name varchar(10),JGSJ date);

插入测试数据,数据量越大,越能体现现象,

Begin

For i in 1..1000000 loop

Insert into test_gel values(i,’A123456’,sysdate);

End loop;

End;

方法1、使用正常update语句更新:

Update test_gel  SET name = 'A88888'

漫长等待:

方法2、使用rowid更新

DECLARE

  CURSOR cur IS

    SELECT 

     id,name ,ROWID ROW_ID

      FROM test_gel

     ORDER BY ROWID;  ---如果表的数据量不是很大,可以不用 order by rowid

  V_COUNTER NUMBER;

BEGIN

  V_COUNTER := 0;

  FOR row IN cur LOOP

    UPDATE test_gel

       SET name = 'A88888'

     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;

还没反应过来就搞定了,呵呵

0 0
原创粉丝点击