Имеется Oracle 8.1.7 + Developer 6i.
Запускаю форму в Формсах, в одной из процедур формы включаю профайлер, выполняю в цикле процедуру серверного пакета, выключаю профайлер.
В отчете профайлера получаю странный результат, как будто некоторые строки в серверной процедуре выполнены 100 раз (=число вызовов процедуры из формы в цикле), хотя по идее эти строки в тесте не должен выполняться ни одного раза, а некоторые другие строки - 200 раз, хотя должны выполниться только 100 раз.
Усомнившись в правильности работы процедуры, пишу отладочную процедурку:
procedure write_log(v_log in varchar2) is
pragma autonomous_transaction;
begin
insert into log_table(id, log)
select log_seq.nextval, v_log from dual;
commit;
end;
и вставляю ее вызовы в сомнительные места кода:
if .... then
write_log('point 1'); -- должен выполниться 0 раз
strange_statement_1;
...
end if;
...
write_log('point 2'); -- должен выполниться 100 раз
strange_statement_2;
Получаю в таблице log_table как и ожидалось 0 строк 'point 1' и 100 строк 'point 2'.
Смотрю новый отчет профайлера - строка, записывающая 'point 2', выполнена 200 раз! Строка, записывающая 'point 1', выполнена 0 раз, но вслед за ней идущая строка strange_statement_1 выполнена 100 раз!
Как такое объяснить?