Oracle (8)에 패키지 변수가 있고 여러 트리거에서 호출 된 함수에서 수정 (증가)하면 한 번에 여러 번 함수가 호출 될 수 있습니까?Oracle 패키지 변수의 안전성
특히 비즈니스 트랜잭션에는 시퀀스 번호가 있으므로 특정 세션에 대해 시퀀스의 다음 숫자를 반환하는 함수가 있고 시퀀스 번호를 나타내는 패키지 변수를 증가시키는 함수가 있습니다. 기본적으로, 함수는 같은입니다
function get_seq_num return number is
ret number;
begin
if g_seq_num is not null then
ret := g_seq_num;
g_seq_num := g_seq_num + 1;
else
g_seq_num := 1;
end if;
return ret;
end get_seq_num;
이 주어진 트랜잭션에 대해 같은 seq_num를 기록하는 시도를 트리거 것으로 보인다, 내가 확실히 (그들은 내가 그들이 생각하는 동시에 실행하지 않으면 밖으로 왜 작동하지 않을 수 있습니다 하지 않을 것이다).
** 주 1 : 공식적으로, 이것은 내가 상속과 상관없이이를 변경하지 않는 위치에 아마 나는 한 레거시 코드가 얼마나 나쁜 그것이 연습 ....
** 비고 2 : 함수가 여러 번 동시에 실행될 수 있다고 생각하지 않기 때문에 record_seq_num이 다른 곳에서 업데이트 될 수 있는지 여부를 조사하고 있습니다 ...
'g_seq_num '의 현재 값이'NULL '이면 함수가'NULL '을 반환합니다. 패키지 변수가 NULL이 아닌 값으로 초기화 된 경우 이것이 바람직한 동작인지 또는 어쩌면 결코 발생하지 않을지는 모르겠지만 이상하게 보입니다. –