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.