¿Hay alguna forma en la base de datos de Oracle de definir desencadenante que se desencadenará sincrónicamente antes de COMMIT (y ROLLBACK si arroja una excepción) en caso de que se cambie la tabla especificada?¿Cómo se define un activador ON COMMIT en Oracle?
Respuesta
No hay un mecanismo de activación ON COMMIT en Oracle. Sin embargo hay soluciones:
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).
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.
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.
- 1. Activador de Oracle para crear un autonumber
- 2. Cómo usar Rollback/Commit en Oracle SQL
- 3. Oracle lag entre commit y select
- 4. ¿Cómo se define un pedido en Scala?
- 5. ¿Cómo se define threadsafe?
- 6. ¿Cómo se usa #define?
- 7. ¿Cómo se define (?) Internamente?
- 8. ORM Para .Net ON Oracle
- 9. ¿Cómo se define un párrafo en un NSAttributedString?
- 10. Cuadrado de un número que se define usando #define
- 11. ¿Cuándo se activa el Activador de Ninject?
- 12. ¿Cómo se define correctamente PRINT_NOTIFY_INFO_DATA?
- 13. Oracle equivalente a DISTINCT ON de Postgres?
- 14. Cómo usar propiedades personalizadas en un activador ControlTemplate
- 15. ¿Cómo se define una definición en C?
- 16. ¿Cómo se define una @interface en Scala?
- 17. ¿Cómo se define ESC char en git?
- 18. ¿Cómo se define enum en as3?
- 19. Activador de SQL en Truncar
- 20. ¿Cómo se define un alias en la concha de pescado?
- 21. ¿Cómo se define un rasgo de paquete * privado * en Scala?
- 22. ¿Cómo se define un nuevo Charset en Java/Android?
- 23. ¿Cómo se define un objeto C# en tiempo de ejecución?
- 24. ¿Cómo se define un tipo para una función en Scala?
- 25. ¿Cómo se define la función en .emacs?
- 26. Oracle: SET SERVEROUTPUT ON con Toad
- 27. Activador emergente de Java en Linux
- 28. ¿Cómo se define una función en ghci en múltiples líneas?
- 29. Crear un activador que inserta valores en una nueva tabla cuando se actualiza una columna
- 30. $ excepción se define en "locales"
Gracias. La opción n. ° 1 es conveniente para mi caso. –