# 데이터베이스/오라클

[ORACLE] PL/SQL Autonomous (자율 트랜잭션)

dev-jjong 2024. 7. 30. 10:48
create or replace function seq_nextval(l_gubun number) return number
as
    pragma autonomous_transaction;
    l_new_seq seq_tab.seq%type;
begin
    update seq_tab
    set	seq = seq+1
    where gubun = l_gubun;
    
    select seq into l_new_seq
    from seq_tab
    where gubun = l_gubun;
    
    commit;
    return l_new_seq;
end;

 

PL/SQL 함수/프로시저르 자율 트랜잭션으로 선언하면, 그 내부에서 커밋을 수행해도 메인 트랜잭션은 커밋하지 않은 상태로 남는다.

메인 트랜잭션 INSERT 문에서 아래와 같이 채번 함수를 호출하고 최종적으로 커밋하지 전까지 다른 작업을 많이 수행하더라도 채번 테이블 로우 Lock은 이미 해제한 상태이므로 다른 트랜잭션을 블록킹하지 않는다.

 

insert into target_tab values (seq_nextval(123), :x, :y, :z);