수색…


비고

자율 트랜잭션의 일반적인 사용 사례는 다음과 같습니다.

  1. 위의 예제에서 설명한 오류 로깅 프레임 워크와 같은 로깅 프레임 워크를 작성하는 데 사용됩니다.
  2. 트랜잭션의 최종 상태 (COMMIT 또는 ROLLBACK)와 관계없이 테이블의 트리거에서 DML 작업을 감사합니다.

로깅 오류에 자율 트랜잭션 사용

다음 절차는 일반적인 오류 로그 테이블에 응용 프로그램의 모든 오류를 기록하는 데 사용되는 일반적인 절차입니다.

CREATE OR REPLACE PROCEDURE log_errors
(
  p_calling_program IN VARCHAR2,
  p_error_code IN INTEGER,
  p_error_description IN VARCHAR2
)
IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO error_log
  VALUES
  (
  p_calling_program,
  p_error_code,
  p_error_description,
  SYSDATE,
  USER
  );
  COMMIT;
END log_errors;

다음 익명 PLSQL 블록은 log_errors 프로 시저를 호출하는 방법을 보여줍니다.

BEGIN
   DELETE FROM dept WHERE deptno = 10;
EXCEPTION
   WHEN OTHERS THEN
      log_errors('Delete dept',sqlcode, sqlerrm);
      RAISE;
END;

SELECT * FROM error_log;

CALLING_PROGRAM    ERROR_CODE    ERROR_DESCRIPTION                                                ERROR_DATETIME         DB_USER
Delete dept        -2292         ORA-02292: integrity constraint violated - child record found    08/09/2016             APEX_PUBLIC_USER


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow