sql >> Base de Datos >  >> RDS >> Oracle

Uso de transacciones anidadas en Oracle

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.