Oracle unterstützt keine verschachtelten Transaktionen. Wenn eine Transaktion festgeschrieben wird, wird sie festgeschrieben. Aus diesem Grund möchten Sie im Allgemeinen keine Transaktion in einer gespeicherten Prozedur festschreiben (oder rückgängig machen), was es schwierig macht, die Prozedur an anderer Stelle wiederzuverwenden, wenn sich Ihre Transaktionssemantik unterscheidet.
Sie können jedoch zu Beginn Ihrer Prozedur einen Sicherungspunkt deklarieren und im Fehlerfall zu diesem Sicherungspunkt zurückkehren. Wenn Sie dann das Commit entfernen, wird die Transaktion ausschließlich vom Anwendungscode und nicht vom Datenbankcode gesteuert
begin
savepoint beginning_of_proc;
insert/update/delete...
exception
when OTHERS then
rollback to beginning_of_proc;
raise;
end;
In diesem Fall wäre meine Tendenz jedoch, keinen Sicherungspunkt im Code zu haben, kein Rollback zu haben und die Ausnahme nicht abzufangen, es sei denn, Sie tun etwas Nützliches damit. Führen Sie einfach die DML aus, lassen Sie alle Ausnahmen auslösen und behandeln Sie sie in Ihrer Anwendung.