Transacciones autónomas

    En ocasiones es necesario que los datos escritos por parte de una transacción sean persistentes a pesar de que la transaccion se deshaga con ROLLBACK.

    PL/SQL permite marcar un bloque con PRAGMA AUTONOMOUS_TRANSACTION. Con esta directiva marcamos el subprograma para que se comporte como transacción diferente a la del proceso principal, llevando el control de COMMIT o ROLLBACK independiente.

    Observese el siguiente ejemplo. Primero creamos un procedimiento y lo marcamos con PRAGMA AUTONOMOUS_TRANSACTION.


CREATE OR REPLACE PROCEDURE Grabar_Log(descripcion VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION
;
BEGIN
  INSERT INTO LOG_APLICACION
  (CO_ERROR, DESCRIPICION, FX_ERROR)
  VALUES
  (SQ_ERROR.NEXTVAL, descripcion, SYSDATE);
  COMMIT; -- Este commit solo afecta a la transaccion autonoma
END ;

    A continuación utilizamos el procedimiento desde un bloque de PL/SQL:


DECLARE
  producto PRECIOS%TYPE;
BEGIN
     producto := '100599';
     INSERT INTO PRECIOS
     (CO_PRODUCTO, PRECIO, FX_ALTA)
     VALUES
     (producto, 150, SYSDATE);
     COMMIT;
EXCEPTION
WHEN OTHERS THEN
    Grabar_Log(SQLERRM);     
    ROLLBACK;
/* Los datos grabados por "Grabar_Log" se escriben en la base
de datos a pesar del ROLLBACK, ya que el procedimiento está
marcado como transacción autonoma.
*/

END;

    Es muy común que, por ejemplo, en caso de que se produzca algún tipo de error queramos insertar un registro en una tabla de log con el error que se ha produccido y hacer ROLLBACK de la transacción. Pero si hacemos ROLLBACK de la transacción tambien lo hacemos de la insertción del log.

 

Pedro  Herrarte  Sánchez
Transacciones autónomas
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:24/07/2006
Última actualizacion:24/07/2006
Visitas totales:87537
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com