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.