Oracle no admite transacciones anidadas. Si una transacción se confirma, se confirma. Es por eso que generalmente no desea confirmar (o revertir) una transacción en un procedimiento almacenado, lo que dificulta la reutilización del procedimiento en otro lugar si la semántica de su transacción difiere.
Sin embargo, puede declarar un punto de guardado al comienzo de su procedimiento y retroceder a ese punto de guardado en caso de error. Si luego elimina la confirmación, la transacción estará controlada únicamente por el código de la aplicación, no por el código de la base de datos
begin
savepoint beginning_of_proc;
insert/update/delete...
exception
when OTHERS then
rollback to beginning_of_proc;
raise;
end;
Sin embargo, en este caso, mi preferencia sería no tener un punto de guardado en el código, no tener una reversión y no detectar la excepción a menos que esté haciendo algo útil con ella. Simplemente haga el DML, deje que se generen excepciones y manéjelas en su aplicación.