Это одно из немногих, возможно, единственно допустимых вариантов использования прагмы AUTONOMOUS_TRANSACTION . Это позволяет нам выдавать SQL в дискретной транзакции, что означает, что материал фиксируется без влияния на более широкую транзакцию. Следовательно, ваши сообщения аудита будут зафиксированы, даже если база данных выйдет из строя до того, как пользователь выполнит явное принятие (или что-то еще).
Очевидно, я не знаю, какие данные вы хотите регистрировать, но напишите такую процедуру и вызовите ее из ваших триггеров:
procedure write_audit
(p_table_name in audit_table.table_name%type
, p_action in audit_table.action%type )
is
pragma autonomous_transaction;
begin
insert into audit_table
(id, table_name, ts, action)
values
(audit_id.nextval, p_table_name, systimestamp, p_action);
commit;
end write_audit;