sql >> Databáze >  >> RDS >> Oracle

Použití vnořených transakcí v oracle

Oracle nepodporuje vnořené transakce. Pokud se transakce potvrdí, potvrdí se. To je důvod, proč obecně nechcete potvrdit (nebo vrátit zpět) transakci v uložené proceduře, což ztěžuje opětovné použití procedury jinde, pokud se sémantika vaší transakce liší.

Můžete však deklarovat bod uložení na začátku vaší procedury a vrátit se k tomuto bodu uložení v případě chyby. Pokud poté odevzdání odstraníte, bude transakce řízena výhradně kódem aplikace, nikoli kódem databáze

begin
  savepoint beginning_of_proc;

  insert/update/delete...

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

V tomto případě by však moje zaujatost spočívala v tom, že bych v kódu neměl záchranný bod, neměl rollback a nezachytil výjimku, pokud s tím neděláte něco užitečného. Stačí provést DML, nechat vyvolat všechny výjimky a zpracovat je ve své aplikaci.



  1. Dynamický SQL vs uložená procedura

  2. Jak Atan2d() funguje v PostgreSQL

  3. Jak správně nastavit připojení PDO

  4. mysql_fetch_array vrátí pouze jeden řádek