2010-11-04 14 views

Respuesta

27

No hay un mecanismo de activación ON COMMIT en Oracle. Sin embargo hay soluciones:

  1. se puede utilizar una vista materializada con ON COMMIT refrescar y añadir factores desencadenantes de este MV. Esto le permitiría activar la lógica cuando se haya modificado una tabla base en el momento de la confirmación. Si el activador genera un error, la transacción se retrotraerá (perderá todos los cambios sin compromiso).

  2. Puede usar DBMS_JOB para aplazar una acción después de la confirmación. Esta sería una acción asíncrona y puede ser deseable en algunos casos (por ejemplo, cuando desea enviar un correo electrónico después de que la transacción se haya realizado correctamente). Si revierte la transacción principal, el trabajo se cancelará. El trabajo y la sesión principal son independientes: si el trabajo falla, la transacción principal no se revertirá.

En su caso, probablemente podría utilizar la opción (1). Personalmente, no me gusta codificar la lógica empresarial en los desencadenantes, ya que agrega mucha complejidad, pero técnicamente creo que sería factible.

+0

Gracias. La opción n. ° 1 es conveniente para mi caso. –

0

Tuve un problema similar, pero desafortunadamente la opción 1 no era conveniente para mi caso.

Otra posible solución, que también es sugerida por "Ask Tom", es especificar un procedimiento almacenado y simplemente llamar a ese procedimiento antes de ejecutar el COMMIT. Esta solución solo es conveniente si tiene acceso al código que ejecuta COMMIT, pero en mi caso esta fue la solución más fácil.

Cuestiones relacionadas