더북(TheBook)

04 | DML문을 실행한 데이터 추적 

변경되거나 삭제된 데이터 추적

INSERT, UPDATE, DELETE 문은 데이터를 생성, 수정, 삭제하는 문장인데, 이들 세 문장을 실행하고 나서 어떤 데이터가 생성되었고 수정되었으며 삭제되었는지 알 수 있는 방법이 있을까? 일부는 알 수 있고 일부는 알 수 없다는 것이 정답이다. INSERT 문을 실행하면 새로운 로우가 삽입되므로 CREATION_DATE 같은 날짜 컬럼을 테이블에 추가해 놓는다면 신규로 생성된 로우를 찾을 수 있다. UPDATE문 역시 WHERE 조건과 SET 절에 명시된 컬럼을 참조하면 어떤 로우와 컬럼이 변경됐는지 찾을 수 있다. 하지만 DELETE문이 실행된 다음에는 조건에 맞는 로우 자체가 삭제되므로 WHERE 조건을 보고 간접적으로는 파악할 수는 있겠지만 정확히 어떤 데이터가 삭제됐는지 알아내기가 힘들다. INSERT나 UPDATE문 역시 WHERE 조건과 SET 절 등을 참조해 간접적으로 알 수 있을 뿐이지 어떤 데이터가 삽입되거나 수정됐는지 정확히 찾아내는 것은 그리 쉽지 않다.

예를 들어 다음과 같이 사원의 급여를 갱신하는 CH17_UPD_TEST란 프로시저를 만들어 보자.

입력

    CREATE OR REPLACE ch17_upd_test_prc ( pn_emp_id NUMBER,
                                          pn_rate   NUMBER )
    IS

    BEGIN
      -- 급여 = 급여 * pn_rate * 0.01
      UPDATE employees
         SET salary = salary * pn_rate * 0.01
       WHERE employee_id = pn_emp_id;

      DBMS_OUTPUT.PUT_LINE('사번 : ' || pn_emp_id);
      DBMS_OUTPUT.PUT_LINE('급여는??? : ');

      COMMIT;
    END;

결과

    PROCEDURE CH17_UPD_TEST_PRC이(가) 컴파일되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.