Jaki jest efekt umieszczenia takiego zatwierdzenia w programie?
Dokumentacja Oracle opisuje COMMIT
jako:
Cel
Użyj COMMIT
oświadczenie do zakończenia bieżącej transakcji i naprawiania wszystkich zmian dokonanych w transakcji. Transakcja jest sekwencją instrukcji SQL, którą Oracle Database traktuje jako pojedynczą jednostkę. To oświadczenie usuwa również wszystkie punkty zapisu w transakcji i zwalnia blokady transakcji.
Jeśli masz trzy PROCEDURE
a każdy z nich zawiera COMMIT
instrukcji, wtedy nie możesz uruchomić wszystkich trzech, jeśli wyjątek wystąpi w drugim, ROLLBACK
je wszystkie, ponieważ zmiany z pierwszych dwóch będą już COMMIT
ted.
Zasadniczo nie użyj COMMIT
w PROCEDURE
lub FUNCTION
ale należy pozostawić dzwoniącemu COMMIT
transakcji, dzięki czemu mogą łączyć ze sobą wiele działań.
Istnieją oczywiście przypadki użycia, w których będziesz chciał naruszyć tę zasadę, ale powinieneś rozważyć każdy przypadek osobno i poświęcić trochę czasu na pełne zrozumienie logiki biznesowej, zanim złamiesz tę zasadę, aby wiedzieć, co to jest COMMIT
w każdym przypadku.
Czy powinienem dokonać tej transakcji jako AUTONOMOUS_TRANSACTION
? ?
Jednym z przypadków użycia jest rejestrowanie — możesz mieć PROCEDURE
który wywołuje inną PROCEDURE
do rejestrowania działań użytkownika i niezależnie od tego, czy początkowa akcja się powiedzie, czy nie, chcesz prowadzić dziennik działań i upewnić się, że dziennik to COMMIT
przetrząsać. W takim przypadku rejestrowana PROCEDURE
powinna być AUTONOMOUS_TRANSACTION
i zawierać COMMIT
oświadczenie i oświadczenie wywołujące nie powinny (prawdopodobnie) mieć żadnego.
Tak więc, jeśli COMMIT
jednej PROCEDURE
jest zawsze wymagane i jest niezależne od tego, czy wywołujący COMMIT
s inne dane, a następnie wykonaj PROCEDURE
AUTONOMOUS_TRANSACTION
. Jeśli PROCEDURE
s mogą być połączone, a następnie ROLLBACK
jako grupa, nie chcesz ich tworzyć AUTONOMOUS_TRANSACTION
s.