Oracle - AUTONOMOUS_TRANSACTION Transakcje autonomiczne

Transakcje autonomiczne

Transakcje autonomiczne tworzone są wewnątrz innych często większych czy bardziej skomplikowanych transakcji. Są od nich niezależne a ich rolą jest wykonywanie pewnych czynności autonomiczne a więc niezależnie od reszty. Przykladownym zastosowaniem może to być np wpisanie logów o błędach pomimo, że transakcja zakończyla sie rollback-iem.

DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN 

  -- PL/SQL ...

  COMMIT;
END;

Transakcje autonomiczne korzystają z zasobów tak samo jak zwykłe transakcje więc i rywalizacja o dostęp do danych odbywa się całkiem zwyczajnie. Trzeba na to uważać ponieważ można sobie zablokować wykonanie bloku, gdy np nie zatwierdzimy update-a na tabeli.

Jedno z najczestszych użyć to cialo triggera

CREATE TRIGGER myTrigger
   BEFORE INSERT ON emp FOR EACH ROW
DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO emp_err_log VALUES(emp_name, sysdate);
   COMMIT;
   EXCEPTION
      WHEN OTHERS THEN null;
END;

Od razu rzuca się w oczy różnica w porównaniu do zwyklego triggera - w transakcji autonomicznej może występować commit lub rollback. Poza tym mozna tam wcisnać za pomocą funkcji execute immediate operacje DDL np: truncate table.

Widocznosc zmian naniesionych w transakcji autonomicznej zalezy od poziomu izolacji - izolation level

2010.03.28 11:48:36.