PDA

Ver la Versión Completa : Desactivar trigger desde procedimiento almacenado


oliverinf
08-10-2004, 15:32:50
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,

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,

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...

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