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)
-   -   Como activar/desactivar todos los triggers con una sola instruccion (https://www.clubdelphi.com/foros/showthread.php?t=11601)

lbuelvas 18-06-2004 16:44:30

Como activar/desactivar todos los triggers con una sola instruccion
 
Hola foro,

Tiempo sin vernos, tenemos una BD con bastantes triggers (cerca de 200) y eso que todavia no hemos colocado triggers para hacer trazo de auditoria en campos especificos por cada tabla (3 triggers por cada tabla).

Quisieramos saber si es posible con una sola instruccion (y sin provocar daños) activar / desactivar todos los triggers

Gracias

guillotmarc 18-06-2004 16:55:03

Hola.

Creo que no hay ninguna instrucción para desactivarlos todos de golpe, aunque te puedes montar un procedimiento almacenado que recorra las tablas de sistema para averiguar todos los triggers, y irlos desactivando uno a uno, mediante sentencias generadas dinamicamente y ejecutadas con la instrucción EXECUTE STATEMENT (solo para Firebird 1.5).

NOTA: Si no utilizas Firebird 1.5, puedes hacer lo mismo, pero desde tu aplicación Delphi.

Saludos.

guillotmarc 18-06-2004 16:56:40

Por cierto, creo que un Trigger solo puedes activarlo/desactivarlo 255 veces antes de tener que desbloquearlo mediante un Backup/Restore.

Parece ser que todos los objetos tienen un contador de modificaciones, que solo puede llegar a 255, y que se resetea con un Backup/Restore.

Saludos.

lbuelvas 18-06-2004 17:15:58

Me puse a ver algo del diccionario de datos, fijense que con

select *
from rdb$triggers
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'

se pueden ver los triggers del usuario y el campo que dice
si esta activo/inactivo el trigger es inactive (0 activo, 1 inactivo)

sera que para desactivarlos la instruccion de abajo funcionará ?

update
from rdb$triggers
set inactive = 1
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'

y para activarlos

update
from rdb$triggers
set inactive = 0
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'

jachguate 18-06-2004 19:13:02

Creo que no es conveniente alterar directamente el diccionario de datos. Puede que en esta versión de ib/fb te sea suficiente con cambiar ese campo (que no lo se), pero nada garantiza que sea así en versiones futuras. Por ello, creo que es mejor seguir el consejo de marc, e ir generando sentencias SQL para desactivar los triggers uno a uno.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 01:29:09.

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