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);
'# 데이터베이스 > 오라클' 카테고리의 다른 글
[ORACLE] 21C XE에서 ORA-12543: TNS:수신지 호스트에 도달할 수 없습니다. 오류해결방법 (0) | 2024.07.17 |
---|---|
[ORACLE] Direct Path Insert (0) | 2023.07.27 |
[ORACLE] 데이터베이스 CALL이 성능에 미치는 영향 테스트 (0) | 2023.07.26 |
[ORACLE] 월별 누적 매출 예제 (0) | 2023.02.22 |
[ORACLE] emp, dept 테이블 생성 스크립트 (0) | 2023.02.22 |