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)
-   -   Desactivar trigger desde procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=15059)

oliverinf 08-10-2004 15:32:50

Desactivar trigger desde procedimiento almacenado
 
Hola a todos, se puede desactivar y/o activar un trigger dentro del código de un procedimiento almacenado?

Desde ya muchas gracias.

Guillermo

athlontado 08-10-2004 19:09:20

Debería funcionar con esta sentencia:
ALTER TRIGGER (nombre del disparador) INACTIVE;

Y para reactivarlo:
ALTER TRIGGER (nombre del disparador) ACTIVE;

No sé si te hará falta ejecutar COMMIT WORK, después de la sentencia de activación ó desactivación, para que haga efecto dentro del procedimiento.

Saludos ;)

kinobi 08-10-2004 22:09:10

Hola,

Cita:

Empezado por athlontado
Debería funcionar con esta sentencia:
ALTER TRIGGER (nombre del disparador) INACTIVE;

me da la impresión que una sentencia del Lenguaje de Definición de Datos (DDL), como es ALTER TRIGGER, no es posible ejecutarla dentro de un procedimiento almacenado (o dentro de un disparador). Incluso la extensión EXECUTE STATEMENT de la versión 1.5 creo que está limitada sólo a sentencias del Lenguaje de Manipulación de Datos (DML).

Saludos.

athlontado 09-10-2004 10:23:14

La forma de hacer esto para que funcione correctamente, al menos con FB 1.5, es la siguiente:

SET TERM ^ ;

CREATE PROCEDURE NEW_PROCEDURE
AS
DECLARE VARIABLE SENTENCIA CHAR(50);
begin
SENTENCIA = 'ALTER TRIGGER DISPARADOR INACTIVE';
EXECUTE STATEMENT SENTENCIA;
end
^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE NEW_PROCEDURE TO SYSDBA;

Suerte y saludos ;)

kinobi 09-10-2004 10:54:10

Hola,

Cita:

Empezado por athlontado
La forma de hacer esto para que funcione correctamente, al menos con FB 1.5, es la siguiente:

el problema está ahí, en la versión, ya que el compañero que inició el hilo no especifica versión, ni siquiera si está utilizando Firebird. Desde luego en versiones anteriores a FB 1.5 no es posible hacerlo, ya que no existe la sentencia EXECUTE STATEMENT.

Por otro lado, estando en la versión FB 1.5, no estaba seguro si ésta admite la ejecución de sentencias DDL...

Cita:

Empezado por kinobi
Incluso la extensión EXECUTE STATEMENT de la versión 1.5 creo que está limitada...

De todas formas, no es buena idea modificar en un disparador o procedimiento los metadatos de la base de datos. Se puede llegar a paradojas como eliminar (por poner un ejemplo), dentro de la ejecución recursiva de un procedimiento, ese mismo procedimiento y, al deshacer la secuencia de llamadas, nos encontraríamos con un "pequeño" problema. No hay que olvidar que el código de procedimientos almacenados y disparadores forman parte también de los metadatos de la base de datos.

Saludos.

oliverinf 09-10-2004 16:17:45

Muchas gracias a todos.
Disculpen por no haber colocado los datos de la BD que utilizo. Actualmente estoy usando Firebird 1.5.
Estoy trabajando en varios proyectos!!!! y no he tenido tiempo de probar la sentencia, pero apenas lo haga les cuento como me fue.

Guillermo


La franja horaria es GMT +2. Ahora son las 14:07:49.

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