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 08-10-2004
oliverinf oliverinf is offline
Miembro
 
Registrado: feb 2004
Posts: 65
Poder: 21
oliverinf Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 08-10-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Poder: 20
athlontado Va por buen camino
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
__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
Responder Con Cita
  #3  
Antiguo 08-10-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 23
kinobi Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 09-10-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Poder: 20
athlontado Va por buen camino
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
__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
Responder Con Cita
  #5  
Antiguo 09-10-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 23
kinobi Va por buen camino
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.

Última edición por kinobi fecha: 09-10-2004 a las 11:01:04.
Responder Con Cita
  #6  
Antiguo 09-10-2004
oliverinf oliverinf is offline
Miembro
 
Registrado: feb 2004
Posts: 65
Poder: 21
oliverinf Va por buen camino
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
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 10:31:27.


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