Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jaki jest efekt umieszczenia zatwierdzenia po DML w procedurze?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01950:brak uprawnień w obszarze tabel „USERS”

  2. Oracle PL/SQL:Przykład DBMS_SCHEDULER.CREATE_JOB

  3. przekazanie nazwy tabeli jako parametru plsql

  4. FLOOR() Funkcja w Oracle

  5. wybierz TOP N wierszy z tabeli