Если у меня есть переменная пакета в Oracle (8), и она изменена (увеличена) в функции, вызываемой из нескольких триггеров, возможно ли, чтобы функция вызывалась несколько раз одновременно?
В частности, у нас есть порядковые номера в бизнес-транзакции, поэтому у нас есть функция, которая возвращает следующий номер в последовательности для определенного сеанса, а затем функция, которая создает переменную пакета, представляющую порядковый номер.По сути, функция выглядит примерно так:
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;
Похоже, что 2 триггера пытаются зарегистрировать один и тот же seq_num для данной транзакции, и я не могу понять, почему (если они не запускаются одновременно, что ядумал, что они не будут).
** ПРИМЕЧАНИЕ 1. Для протокола, это устаревший код, который я унаследовал, и, вероятно, не в состоянии изменить его, независимо от того, насколько плохая практика это ....
** ПРИМЕЧАНИЕ 2. Поскольку я не думаю, что функция может выполняться несколько раз одновременно, я смотрю, можно ли обновить record_seq_num где-либо еще ....