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)
-   -   Generadores, disparadores y el control transacional (https://www.clubdelphi.com/foros/showthread.php?t=52047)

rastafarey 08-01-2008 21:38:23

Generadores, disparadores y el control transacional
 
Si tengo dos generadores uno(gen1) lo incremento en un trigger before y el segundo(gen2) lo incremento en el after se puede dar un caso extremo que no ocurra el incremento del segundo generador por algun error o bajon de corriente o algo por el estilo.

La pregunta la hago ya que los generadores se escapan del control transacional y los disparadores hasta donde tengo entendido se manejan en un proceso atomico osea o todo se hace bien o no se hace. pero se trata de generadores y aqui la cosa en diferente.

Si no me explique bien por favor me lo notifican.

maeyanes 08-01-2008 21:42:00

Hola...

Me imagino que si podría darse el caso que el segundo no se incremente... y sería en el caso que exista un apagón y no llegue a ejecutarse el disparador after...


Saludos...

rastafarey 08-01-2008 22:04:21

Resp
 
En este caso el primero quedaria incrementado o no. Para ese momento ya se abra bajado la informacion a disco.

No se pregunto.

jachguate 09-01-2008 04:18:31

si, quedaría incrementado.

Hasta luego.

;)

rastafarey 09-01-2008 14:08:56

resp
 
Gracias por sus respuestas.

Tengo qu einvestigas unas cosas mas acerca de las arquitecturas.

Luego que lea un poco mas explico las dudas que me surgieron y como las solucione.

duilioisola 09-01-2008 15:11:27

http://www.firebirdsql.org/pdfmanual...ator-Guide.pdf
Página 7

Cita:

Generators and transactions
As said, generators live outside of transaction control. This simply means you cannot safely
“rollback” generators inside a transaction. There may be other transactions executing at the same time
that change the value while your transaction runs. So once you have requested a generator value, consider
it as “gone forever”.
When you start a transaction and then call a generator and get a value of – let's say – 5, it will remain
at that value even if you roll back the transaction (!). Don't even think of something like “OK, when
I rollback, I can just do GEN_ID(mygen,-1) afterwards to set it back to 4”. This may work most of the
time, but is unsafe because other concurrent transactions may have changed the value in between. For
the same reason it doesn't make sense to get the current value with GEN_ID(mygen,0) and then increment
the value on the client side.
Los generadores trabajan fuera de las transacciones, por lo que puede darse el caso de que haya pasado por el Trigger Before, incrementado el valor y luego haya generado una excepción que no ejecute el trigger After.

No es necesario ningún corte de corriente ni nada especial para generar este error.


La franja horaria es GMT +2. Ahora son las 11:52:45.

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