Sobes.tech
Назад к вопросам
Middle
11

Что такое автономная транзакция? Как её использовать и как объявить?

Компании, где спрашивали
AltDev

Ответ от нейросети

sobes.tech AI

Автономная транзакция — это независимая транзакция, которая выполняется внутри другой транзакции, но при этом не влияет на её состояние и может быть зафиксирована или отменена отдельно.

Она полезна, когда нужно выполнить отдельные операции логирования, аудита или сохранения промежуточных данных, не влияя на основную транзакцию.

В Oracle автономная транзакция объявляется с помощью pragma:

PRAGMA AUTONOMOUS_TRANSACTION;

Пример использования:

CREATE OR REPLACE PROCEDURE log_error(p_msg VARCHAR2) IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO error_log(message, log_date) VALUES (p_msg, SYSDATE);
  COMMIT; -- фиксируем изменения автономно
END;

Таким образом, даже если основная транзакция откатится, запись в журнал ошибок сохранится.