2017-08-28 2 views
0

200,000レコードを変更するスクリプトを実行しようとしています。しかし、私は10000のレコードを別々に変更したいので、最初の10000、次に2番目の10000というように変更します。oracleスクリプトを小さなスクリプトに分割する

FOR d IN ids -- ids is a cursor which is filled by 200,000 record 
     LOOP 
     UPDATE doctor 
     SET name = 
      (SELECT name 
      FROM source 
      WHERE id = d.id 
      AND type = 
      (SELECT MAX(type) 
      FROM Da 
      WHERE i = id 
      ) 
     ) 
     WHERE pat = d.pat; 
     COMMIT; 
     END LOOP; 

答えて

1

あなたは10000個のレコードを別々に変更すると言っていますか?あなたは10000のブロックでコミットしたいということですか?

あなたが行うことができますカウンター

record_count := 0 
    FOR d IN ids -- ids is a cursor which is filled by 200,000 record 
      LOOP 
      UPDATE doctor 
      SET name = 
      (SELECT name 
      FROM source 
      WHERE id = d.id 
      AND type = 
      (SELECT MAX(type) 
      FROM Da 
      WHERE i = id 
      ) 
     ) 
     WHERE pat = d.pat; 
     record_count := record_count +1; 
     IF mod(record_count,10000) = 0 
     THEN 
     COMMIT; 
     END IF; 
     END LOOP; 
     COMMIT; -- COMMIT for the last time if you have residual records 
を使用して
関連する問題