Oracle. взаимосвязь между job который изменяет данные (update) и ошибкой при срабатывании триггера (after update) . Oracle chains

Для расчета витрин данных на БД Oracle 11.2 использую Chains https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse009.htm#ADMIN10021.
На последнем шаге есть программа которая обновляет значение в специальной таблице DM.param на 1 (на первом шаге аналогичная программа сбрасывает в 0). Это флаг для других внешних систем, что расчет витрин успешно завершён. Код самой программы:

dbms_scheduler.create_program(
      program_name => 'P_DM_PARAM_FINISH',
      program_type => 'PLSQL_BLOCK',
      program_action => 'update DM.param set the_end = 1, SYSMOMENT = sysdate;',
      enabled => TRUE

На эту же таблицу "DM.param" завязан триггер (AFTER UPDATE ON DM.PARAM) который рассылает на почту уведомление о расчете витрины. Но напрямую триггер в коде расчета витрин или job'e не используется. Сегодня программа P_DM_PARAM_FINISH завершилась со статусом FAILD и ошибкой ORA-29278: SMTP transient error, ошибка связана сугубо с отправкой email и триггером. Что для меня странно, т.к напрямую job и триггер не связаны. Как триггер оказал влияние на работу job'a если триггер срабатывает после выполнения update, т.е. закрытия транзакции. (увы не могу точно сказать прошел ли update, т.к. перезапустили расчет и значение затерлось)

Кто-то может объяснить причины такого поведения?


Ответы (1 шт):

Автор решения: Roman Konoval

Триггер выполняется в той же транзакции, что и update. Так что ошибка в триггере, если ее не обработать, ведет к ошибке всей операции UPDATE и откату транзакции.

→ Ссылка