일단은 저도 대량으로 update해본 경험이 적어서
단순히 공부했던 내용으로만 알려드리면..
DECLARE CURSOR CUR IS SELECT ROWID -- UPDATE 할 대상 쿼리 FROM TABLE1; TYPE RID IS TABLE OF UROWID; RID_PACK RID; BEGIN OPEN CUR; LOOP FETCH CUR BULK COLLECT INTO RID_PACK LIMIT 10000; -- 만 개씩 처리 EXIT WHEN RID_PACK.COUNT = 0; -- 데이터가 없으면 종료 FORALL I IN RID_PACK.FIRST .. RID_PACK.LAST -- 만 개씩 UPDATE UPDATE TABLE1 SET COL1 = 'SSS' WHERE ROWID = RID_PACK(I); COMMIT; END LOOP; CLOSE CUR; END;
BULK COLLECT로 원하는 데이터 건별로 끊어서 처리하고 COMMIT을 반복하게 할 수 있습니다.
해당 프로시저가 수행되는 동안 데이터 추가가 있을 수 있으니
프로시저 종료 후에 다시 한번 SELECT 하여서 데이터 확인하셔야 하구요.
24시간 운영 중인 서버가 아니라면
일과 후에 MERGE문을 통해 한 번의 쿼리로 UPDATE해주는 게 개인적으로는 더 나을 것 같습니다.