더북(TheBook)

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