Мне нужно обработать записи в l oop хранимой процедуры, например:
create or alter procedure process_waiting_records
as
declare v_id type of column my_table.id;
begin
for
select
t.id
from
my_table t
where
(t.status = 'WAITING_TO_PROCESS')
order by
t.created_at
into
:v_id
do
begin
execute procedure process_one_record(:v_id);
end
end ^
Проблема в том, что при сбое выполнения process_one_record()
(генерируется любое исключение), вся Набор модификаций будет откатываться от вызывающего кода.
Цель состоит в том, чтобы обработать все возможные записи, на данный момент мне все равно, если некоторые записи не могут быть обработаны, эти ошибочные записи будут в любом случае записаны в таблицу журнала (с использованием автономной транзакции). ).
Я собирался вызвать хранимую процедуру process_one_record()
также в блоке автономных транзакций с предложением when any do (dummy code)
. Тем не менее, я думаю, что это не сработает, потому что эта неудачная транзакция не будет откатываться, а будет подтверждена (имеется в виду обработка topi c: Firebird 2.5 в автономной транзакции ).
Может кто-нибудь указать мне правильное направление, как решить эту проблему?