Sobes.tech
Middle
32

Для чего нужна директива PRAGMA AUTONOMOUS_TRANSACTION?

Companies where asked
МВидео/эльдорадо

Answer from AI

sobes.tech AI

Директива PRAGMA AUTONOMOUS_TRANSACTION используется в Oracle PL/SQL для создания автономной транзакции внутри основной транзакции. Это значит, что код, помеченный этой директивой, выполняется в отдельной транзакции, независимой от основной.

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

Пример:

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;

В этом примере процедура записи ошибки выполняется в автономной транзакции, поэтому запись в лог сохраняется независимо от результата основной транзакции.