Oracle에서 COMMIT에 대한 트리거를 정의하는 방법은 무엇입니까?
지정된 테이블이 변경된 경우 COMMIT 전에 동기적으로 실행되는 트리거(및 예외가 발생하는 경우 ROLBACK)를 정의할 수 있는 오라클 데이터베이스의 방법이 있습니까?
Oracle에는 ON COMMIT 트리거 메커니즘이 없습니다.그러나 다음과 같은 해결 방법이 있습니다.
ON COMMIT REFRESH와 함께 구체화된 보기를 사용하고 이 MV에 트리거를 추가할 수 있습니다.이렇게 하면 커밋 시 기본 테이블이 수정되었을 때 논리를 트리거할 수 있습니다.트리거에서 오류가 발생하면 트랜잭션이 롤백됩니다(커밋되지 않은 모든 변경 사항이 손실됨).
DBMS_JOB를 사용하여 작업을 커밋 후로 연기할 수 있습니다.이는 비동기식 작업이며 경우에 따라 적합할 수 있습니다(예: 트랜잭션이 성공한 후 전자 메일을 보내려는 경우).기본 트랜잭션을 롤백하면 작업이 취소됩니다.작업과 기본 세션은 독립적입니다. 작업이 실패하면 기본 트랜잭션이 롤백되지 않습니다.
이 경우 옵션 (1)을 사용할 수 있습니다.저는 개인적으로 비즈니스 로직을 트리거로 코딩하는 것을 좋아하지 않지만 기술적으로는 가능할 것이라고 생각합니다.
저도 비슷한 문제가 있었는데, 안타깝게도 제 경우 옵션 1이 불편했습니다.
"Ask Tom"에서 제안하는 또 다른 가능한 해결책은 저장 프로시저를 지정하고 COMMIT를 실행하기 전에 해당 프로시저를 호출하는 것입니다.이 솔루션은 COMMIT를 실행하는 코드에 액세스할 수 있는 경우에만 편리하지만, 저의 경우에는 이것이 가장 쉬운 솔루션이었습니다.
언급URL : https://stackoverflow.com/questions/4098771/how-to-define-a-trigger-on-commit-in-oracle
'programing' 카테고리의 다른 글
| Postgres의 DISTINCT ON에 해당하는 Oracle? (0) | 2023.06.14 |
|---|---|
| 파이썬에서 경고가 예외인 것처럼 포착하려면 어떻게 해야 합니까? (0) | 2023.06.14 |
| 동적 가져오기()에서 전체 URL 사용 (0) | 2023.06.14 |
| 첫 번째 문자 Vue 2에서 시작하는 요소 표시 (0) | 2023.06.14 |
| 내 단추 텍스트가 롤리팝의 모든 캡스에 강제로 적용되는 이유는 무엇입니까? (0) | 2023.06.14 |