sql >> Databasteknik >  >> RDS >> Oracle

Använder kapslade transaktioner i Oracle

Oracle stöder inte kapslade transaktioner. Om en transaktion binder, binder den. Det är därför du i allmänhet inte vill utföra (eller återställa) en transaktion i en lagrad procedur, vilket gör det svårt att återanvända proceduren någon annanstans om din transaktionssemantik skiljer sig.

Du kan dock deklarera en räddningspunkt i början av din procedur och återgå till den räddningspunkten i händelse av ett fel. Om du sedan tar bort commit så kontrolleras transaktionen enbart av applikationskoden inte av databaskoden

begin
  savepoint beginning_of_proc;

  insert/update/delete...

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

I det här fallet skulle min fördom vara att inte ha en räddningspunkt i koden, att inte ha en återställning och att inte fånga undantaget om du inte gör något användbart med det. Gör bara DML, låt eventuella undantag kastas och hantera dem i din ansökan.



  1. Är vi redo för Nordic PGDay?

  2. MySQL-fel 1264:värde utanför intervallet för kolumn

  3. Hur får man ASCII-värde i Oracle?

  4. LOAD DATA LOCAL INFILE ger felet Det använda kommandot är inte tillåtet med denna MySQL-version