④ 다중 로우 DELETE

    한 번에 여러 행을 삭제할 때도 RETURNING INTO 절을 사용해 삭제된 정보를 가져올 수 있다. 다중 로우를 삭제해 반환되는 행이 여러 개이므로 다중 로우를 UPDATE 했을 때처럼 컬렉션 변수와 BULK COLLECT INTO 절을 사용해야 한다.

    입력

        DECLARE
          -- 레코드 타입 선언
          TYPE NT_EMP_REC IS RECORD (
               emp_name      employees.emp_name%type,
               department_id employees.department_id%type,
               job_id        employees.job_id%type);
    
          -- NT_EMP_REC 레코드를 요소로 하는 중첩 테이블 선언
          TYPE NTT_EMP IS TABLE OF NT_EMP_REC;
          -- NTT_EMP 중첩 테이블 변수 선언
          VR_EMP NTT_EMP;
    
        BEGIN
          -- 60번 부서에 속한 사원 삭제 ...
          DELETE emp_bk
           WHERE department_id = 60
          RETURNING emp_name, department_id, job_id
          BULK COLLECT  INTO VR_EMP;
    
          COMMIT;
    
          FOR i in VR_EMP.FIRST .. VR_EMP.LAST
          LOOP
            DBMS_OUTPUT.PUT_LINE(i || '--------------------------------');
            DBMS_OUTPUT.PUT_LINE('변경 사원명 : ' || VR_EMP(i).emp_name);
            DBMS_OUTPUT.PUT_LINE('변경 부서 : ' || VR_EMP(i).department_id);
            DBMS_OUTPUT.PUT_LINE('retire_date : ' || VR_EMP(i).job_id);
          END LOOP;
        END;
    

    결과

        1--------------------------------
        변경사원명 : Alexander Hunold
        변경부서 : 60
        retire_date : IT_PROG
        2--------------------------------
        변경사원명 : Bruce Ernst
        변경부서 : 60
        retire_date : IT_PROG
        3--------------------------------
        변경사원명 : David Austin
        변경부서 : 60
        retire_date : IT_PROG
        4--------------------------------
        변경사원명 : Valli Pataballa
        변경부서 : 60
        retire_date : IT_PROG
        5--------------------------------
        변경사원명 : Diana Lorentz
        변경부서 : 60
        retire_date : IT_PROG
    

    이런 식으로 RETURNING INTO 절을 사용하면 별도의 SELECT문을 사용하지 않고서도 UPDATE나 DELETE된 로우의 정보를 추출해 낼 수 있다. 지금까지 함수, 프로시저, 패키지 등의 프로그램을 작성할 때 활용할 수 있는 몇 가지 디버깅 기법에 대해 살펴 보았다. 이 장에서 소개한 방법 외에도 훨씬 더 기발한 방법을 얼마든지 찾을 수 있으므로 독자 여러분도 좋은 아이디어를 내어 더 나은 방법을 스스로 찾아 보자.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.