Cita:
Empezado por Axel_Tech
Hola a todos, a ver si alguien me puede dar una idea de como solucionar el siguiente problema: tengo un trigger before insert que si se cumple una determinada condición salta una excepción y también quiero que se meta en un campo del registro anterior (temporalmente hablando) un texto con el error.
Estoy probando de estas dos formas:
Código SQL [-]begin IF (condicion) THEN BEGIN EXCEPTION NOMBREEXCEPCION 'Texto de la excepción.'; UPDATE TABLA SET CAMPO1 = 'DESCRIPCIÓN DE LA EXCEPCIÓN' WHERE CAMPOCLAVE = 'DATO'; END end
Código SQL [-]begin IF (condicion) THEN BEGIN EXCEPTION NOMBREEXCEPCION; END WHEN EXCEPTION NOMBREEXCEPCION DO BEGIN EXCEPTION NOMBREEXCEPCION 'Texto de la excepción.'; UPDATE TABLA SET CAMPO1 = 'DESCRIPCIÓN DE LA EXCEPCIÓN' WHERE CAMPOCLAVE = 'DATO'; END end
y con las 2 me salta la excepción pero no me hace el update. ¿Automáticamente cuando hay una excepción se cancela todo lo que hace el trigger? Estoy usando Firebird 2.5
|
Hola.
En efecto, si no estoy muy equivocado cuando haces una excepción estás cancelando la transacción y por lo tanto todos los cambios hechos en la tabla (y en el Trigger).
Si no quieres que se cancelen cambios y simplemente quieres notificar de algo a tu aplicación, en lugar de usar excepciones usa eventos (POST_EVENT).
Con un IBEvents capturarás en tu aplicación el evento que se lance en el trigger.
http://www.delphiaccess.com/forum/in...p?topic=3135.0