오라클 PRAGMA AUTONOMOUS_TRANSACTION, 자율 트랜잭션 지정하기
프로시저 내에서 다른 프로시저를 호출하면 같은 트랜잭션에 묶이므로,
독립된 트랜잭션을 가지도록 하고 싶은 경우 사용한다.
PRAGMA 키워드의 AUTONOMOUS_TRANSACTION 옵션을 통해 자율트랜잭션임을 선언해준다.
create or replace FUNCTION FN_TEST
(
p_paramSeq in NUMBER
)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
이렇게 해당 프로시저를 자율트랜잭션으로 만들어주면,
부모 트랜잭션의 락(lock),리소스(resource), 커밋(commit)에 관련된 의존성을 가지지 않는다. 즉, 부모의 커밋 / 롤백 여부에 상관 없이 자신의 작업을 커밋 하거나 롤백할 수 있게 된다.
다만 자율 트랜잭션으로 인해 데드락이 발생할 수 있는데,
자식과 부모 트랜잭션이 별개로 동작하기 때문에 부모와 자식 트랜잭션이 동일한 자원에 대해 서로 점유하려고 하면 데드락이 발생할수 있기 때문에 주의해야한다.
< 사용 예 >
a 프로시저에서 b 프로시저를 호출하되,
b 프로시저를 통해 insert 한 데이터를 a프로시저 내에서 사용하고 싶을 때
출처:
1. PRAGMA 키워드
http://dbcafe.co.kr/wiki/index.php/%EC%98%A4%EB%9D%BC%ED%81%B4_PRAGMA
https://thebook.io/006696/0220/
2. 예제
https://go-coding.tistory.com/95
https://duddal.tistory.com/27
3. 자율트랜잭션의 부작용(데드락)
https://anjoliena.tistory.com/143
'study_db' 카테고리의 다른 글
오라클 SELECT 결과 엑셀로 내보내기 ( 엑셀 저장 / 익스포트 기능 ) (0) | 2023.12.13 |
---|---|
오라클 뷰를 이용한 DB 세션 죽이기 (V$SESSION, V$SQL, V$SQLAREA) (0) | 2023.12.09 |
오라클 함수 생성하기 create or replace FUNCTION (0) | 2023.12.07 |
오라클 랜덤 정수 or 랜덤 문자열 가져오기 (0) | 2023.11.10 |
오라클 LPAD, RPAD 함수 : 공백 채우기 (0) | 2023.09.15 |