Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #2  
Antiguo 03-09-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 03-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:42:11.


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