Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Un fallo en un Trigger ¿ deshace la transacción ? (https://www.clubdelphi.com/foros/showthread.php?t=3344)

guillotmarc 03-09-2003 13:42:41

Un fallo en un Trigger ¿ deshace la transacción ?
 
Hola.

Me he encontrado un caso, en el que aparentemente se han ejecutado la mitad de las instrucciones de un trigger, y no se han ejecutado (o han fallado) las ultimas.

Al necesitar todo en Firebird una transacción, imagino que al ejecutarse un Trigger se crea una transacción (o corre dentro de la transacción de la modificación de la tabla). ¿ Que ocurre si falla una instrucción en el trigger ? ¿ se echa atrás la transacción ? ¿ finaliza el trigger, pero sin cancelar la transacción ?.

¿ Alguien me puede indicar donde encontrar documentación que trate sobre el tema ?.

¿ La única forma de cancelar un cambio si no se ejecuta correctamente un trigger, es controlando una transacción desde el lado cliente ?. Algo así :

Código:

// .... Modificar el ClientDataset
Cn.BeginTrans;
try
  ClientDataset.ApplyUpdates(0);
  Cn.Commit;
except
  Cn.Rollback;
end;

Gracias.

kinobi 03-09-2003 14:38:37

Hola,

Cita:

Posteado originalmente por guillotmarc
¿ Que ocurre si falla una instrucción en el trigger ? ¿ se echa atrás la transacción ? ¿ finaliza el trigger, pero sin cancelar la transacción ?.
según la documentación, yo entiendo que se deshacen las operaciones que se hayan hecho dentro del trigger y ... nada más.

"Errors and exceptions that occur in triggers may be handled using the WHEN statement. If an exception is handled with WHEN, the exception does not return a message to the application and does not necessarily terminate the trigger.

Error handling in triggers works the same as for stored procedures: the actions performed in the blocks up to the error-handling (WHEN) statement are undone and the statements specified by the WHEN statement are performed.
"

-- Data Definition Guide, capítulo 10 (Working with triggers, Error handling in triggers).

Saludos.

guillotmarc 03-09-2003 15:01:59

Hola.

Gracias por la referencia, no se me había ocurrido mirar en ese manual (había consultado la Developers Guide, y la Language Reference).

La verdad es que lo voy a revisar bien, puesto que no conocía la existencia del comando WHEN para capturar errores. Igual necesito usarlo, puesto que parece ser que en un trigger con solo dos instrucciones, se me ha ejecutado la primera y la segunda no. (Aunque quizá el problema haya sido de corrupción de datos, en lugar de la ejecución del trigger, puesto que no encuentro un registro que debería haber creado el trigger).

Gracias de nuevo.

Saludos.


La franja horaria es GMT +2. Ahora son las 21:04:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi