sql >> Database teknologi >  >> RDS >> Oracle

Brug af indlejrede transaktioner i Oracle

Oracle understøtter ikke indlejrede transaktioner. Hvis en transaktion binder, binder den. Det er derfor, du generelt ikke ønsker at begå (eller rulle tilbage) en transaktion i en lagret procedure, hvilket gør det vanskeligt at genbruge proceduren andre steder, hvis din transaktionssemantik er forskellig.

Du kan dog erklære et lagringspunkt i begyndelsen af ​​din procedure og rulle tilbage til det lagringspunkt i tilfælde af en fejl. Hvis du derefter fjerner commit, så er transaktionen udelukkende kontrolleret af applikationskoden ikke af databasekoden

begin
  savepoint beginning_of_proc;

  insert/update/delete...

exception 
  when OTHERS then 
    rollback to beginning_of_proc;
    raise;
end;

I dette tilfælde ville min bias dog være ikke at have et savepoint i koden, ikke at have en rollback og ikke at fange undtagelsen, medmindre du gør noget nyttigt med det. Bare lav DML, lad eventuelle undtagelser blive kastet, og håndter dem i din ansøgning.



  1. SQL DROP TABLE Syntaks – Listet efter DBMS

  2. Implementering af MySQL, MariaDB, Percona Server, MongoDB eller PostgreSQL - gjort nemt med ClusterControl

  3. Forbedring af MySQL-ydeevne med avancerede InnoDB-indstillinger

  4. Tilføj måneder til en dato i PostgreSQL