2017-08-28 23 views
0

我試圖運行一個更改200,000條記錄的腳本。但是我想分別更改每個10000條記錄,所以第一個10000然後第二個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個記錄。你的意思是你想要以10000s的塊數來提交嗎?

你可以做到這一點使用計數器

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