이제 일반적인 커서와 FOR문을 활용해 데이터를 갱신해 보자.
입력
DECLARE
-- 커서 선언
CURSOR c1 IS
SELECT DISTINCT bulk_id
FROM emp_bulk;
-- 컬렉션 타입 선언
TYPE BulkIDTP IS TABLE OF emp_bulk.bulk_id%TYPE;
-- BulkIDTP형 변수 선언
vnt_BulkID BulkIDTP;
vd_sysdate DATE;
vn_total_time NUMBER := 0;
BEGIN
-- 시작 전 vd_sysdate에 현재시간 설정
vd_sysdate := SYSDATE;
OPEN c1;
-- BULK COLLECT 절을 사용해 vnt_BulkID 변수에 데이터 담기
FETCH c1 BULK COLLECT INTO vnt_BulkID;
-- 루프를 돌며 DELETE
FOR i IN 1..vnt_BulkID.COUNT
LOOP
UPDATE emp_bulk
SET retire_date = hire_date
WHERE bulk_id = vnt_BulkID(i);
END LOOP;
COMMIT;
CLOSE c1;
-- 총 소요 시간 계산(초로 계산하기 위해 60 * 60 * 24을 곱함)
vn_total_time := (SYSDATE - vd_sysdate) * 60 * 60 * 24;
-- 컬렉션 변수인 vnt_BulkID 요소 개수 출력
DBMS_OUTPUT.PUT_LINE('전체건수 : ' || vnt_BulkID.COUNT);
-- 총 소요 시간 출력
DBMS_OUTPUT.PUT_LINE('FOR LOOP 소요시간 : ' || vn_total_time);
END;
결과
전체건수 : 10000
FOR LOOP 소요 시간 : 39