이제 일반적인 커서와 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
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.