分页Oracle更新查询

时间:2015-01-30 07:38:21

标签: sql database oracle plsql oracle11g

我有更新查询

UPDATE tablename
set column1 = 'value1', column2= 'value2', column3= 'value3'
where column4 = 'value4

我需要修改以上语句:

  1. 每5,000条记录提交
  2. 在总共500,000行更新后停止。
  3. 在oracle11g中可以吗?我们怎样才能实现它?

    写了一个SQL程序:

    DECLARE
    fromCount   number(10) := 0;
    toCount     number(10) := 0;
    BEGIN 
        LOOP
            toCount := fromCount + 5000;
    
          UPDATE tablename
        set column1 = 'value1', column2= 'value2', column3= 'value3'
        where column4 = 'value4 AND ROWNUM > fromCount AND ROWNUM < toCount;
    
            COMMIT;
    
            IF toCount=500000 THEN
                EXIT;
            END IF;
        END LOOP;
    END;
    

    执行它需要1个多小时。我怎样才能提高它的性能?

1 个答案:

答案 0 :(得分:0)

您可以使用'和rownum&lt; = 500000'条件。但问题是,您不会知道哪些记录已更新,哪些记录未更新。