programing

Oracle에서 COMMIT에 대한 트리거를 정의하는 방법은 무엇입니까?

jooyons 2023. 6. 14. 21:51
반응형

Oracle에서 COMMIT에 대한 트리거를 정의하는 방법은 무엇입니까?

지정된 테이블이 변경된 경우 COMMIT 전에 동기적으로 실행되는 트리거(및 예외가 발생하는 경우 ROLBACK)를 정의할 수 있는 오라클 데이터베이스의 방법이 있습니까?

Oracle에는 ON COMMIT 트리거 메커니즘이 없습니다.그러나 다음과 같은 해결 방법이 있습니다.

  1. ON COMMIT REFRESH와 함께 구체화된 보기를 사용하고 이 MV에 트리거를 추가할 수 있습니다.이렇게 하면 커밋 시 기본 테이블이 수정되었을 때 논리를 트리거할 수 있습니다.트리거에서 오류가 발생하면 트랜잭션이 롤백됩니다(커밋되지 않은 모든 변경 사항이 손실됨).

  2. DBMS_JOB를 사용하여 작업을 커밋 후로 연기할 수 있습니다.이는 비동기식 작업이며 경우에 따라 적합할 수 있습니다(예: 트랜잭션이 성공한 후 전자 메일을 보내려는 경우).기본 트랜잭션을 롤백하면 작업이 취소됩니다.작업과 기본 세션은 독립적입니다. 작업이 실패하면 기본 트랜잭션이 롤백되지 않습니다.

이 경우 옵션 (1)을 사용할 수 있습니다.저는 개인적으로 비즈니스 로직을 트리거로 코딩하는 것을 좋아하지 않지만 기술적으로는 가능할 것이라고 생각합니다.

저도 비슷한 문제가 있었는데, 안타깝게도 제 경우 옵션 1이 불편했습니다.

"Ask Tom"에서 제안하는 또 다른 가능한 해결책은 저장 프로시저를 지정하고 COMMIT를 실행하기 전에 해당 프로시저를 호출하는 것입니다.이 솔루션은 COMMIT를 실행하는 코드에 액세스할 수 있는 경우에만 편리하지만, 저의 경우에는 이것이 가장 쉬운 솔루션이었습니다.

언급URL : https://stackoverflow.com/questions/4098771/how-to-define-a-trigger-on-commit-in-oracle

반응형