Ответ 1
В Oracle нет механизма запуска ON COMMIT. Однако есть обходные пути:
-
Вы можете использовать материализованное представление с ON COMMIT REFRESH и добавить триггеры к этому MV. Это позволит вам вызвать логику, когда базовая таблица была изменена во время фиксации. Если триггер вызывает ошибку, транзакция будет отброшена (вы потеряете все неуправляемые изменения).
-
Вы можете использовать DBMS_JOB для отсрочки действия после коммита. Это было бы асинхронным действием и может быть желательно в некоторых случаях (например, если вы хотите отправить электронное письмо после успешной транзакции). Если вы откатите основную транзакцию, задание будет отменено. Работа и первичный сеанс независимы: если сбой задания, основная транзакция не будет отменена.
В вашем случае вы, вероятно, можете использовать опцию (1). Я лично не люблю кодировать бизнес-логику в триггерах, поскольку она добавляет много сложности, но технически я думаю, что это было бы выполнимо.