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.