Ver la Versión Completa : Execute statement
Ana Tudela
11-12-2006, 16:05:42
Hola,
tengo un procedimiento almacenado en el que quiero meter la activación y desactivación de 3 triggers.
En el begin del procedimiento estoy poniendo:
SENTENCIA1='ALTER TRIGGER actualiza_codigo_pub INACTIVE';
SENTENCIA2='ALTER TRIGGER delete_codigo_pub INACTIVE';
SENTENCIA3='ALTER TRIGGER insert_codigo INACTIVE';
EXECUTE STATEMENT SENTENCIA1;
EXECUTE STATEMENT SENTENCIA2;
EXECUTE STATEMENT SENTENCIA3;
En la declaración de variables, he declarado sentencia1, sentencia2 y sentencia3 como varchar (50)
Muchas gracias;
Bicho
11-12-2006, 16:09:30
Ok, entonces ¿te ha ido bien? o ¿has tenido algún problema?, de ser así, ¿qué tipo de problema te has encontrado?
Porque no cuentas nada, que problema tienes, en que podemos ayudarte, etc.
Saludos
Ana Tudela
11-12-2006, 16:12:25
Es verdad, perdón!!!!,
me da error en el execute statement, es como si no lo reconociese.
Sabeis alguna otra manera de hacerlo??, tengo mal la sintaxis??
Gracias.
Gydba
12-12-2006, 01:02:34
Hola,
Pues la llamada está bien. Hay que ver cómo la ejecutas y qué le estás pasando en las variables.
Y por cierto, no estaría de más aclarar qué error te muestra.
PD: No olvides reactivar los triggers como yo después de hacer lo que necesites... sino ya vas a ver la que te espera :)
Ana Tudela
12-12-2006, 09:59:17
Hola de nuevo,
el error que aparece en Ibexpert es el que os pongo a continuación:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 337, char 10.
STATEMENT.
Las variables SENTENCIA1, SENTENCIA2 y SENTENCIA3 las he declarado en la parte "Variables" del procedimiento y despúes del "Begin" he puesto:
SENTENCIA1='ALTER TRIGGER ACTUALIZA_CODIGO_PUB INACTIVE';
SENTENCIA2='ALTER TRIGGER delete_codigo_pub INACTIVE';
SENTENCIA3='ALTER TRIGGER INSERT_CODIGO INACTIVE';
EXECUTE STATEMENT SENTENCIA1;
EXECUTE STATEMENT SENTENCIA2;
EXECUTE STATEMENT SENTENCIA3;
Los nombres de los trigger que quiero desactivar/activar son "actualiza_codigo_pub", "delete_codigo_pub" y "insert_codigo". En la parte final del procedimiento pero dentro del "Begin" los vuelvo a activar.
Muchas Gracias.
Gydba
12-12-2006, 11:12:23
Buenos días,
Mmm.... creo que algo así me había pasado pero no recuerdo bien donde. En fin, te paso un ejemplo de algo que tengo hecho parecido a lo que necesitás a ver si te ayuda en algo:
CREATE PROCEDURE SP_CHANGETRIGGERSTATE(
prmActivate SMALLINT)
AS
DECLARE VARIABLE strState VARCHAR(8);
BEGIN
IF (prmActivate = 0) THEN strState = 'INACTIVE';
ELSE strState = 'ACTIVE';
-- Change triggers states
EXECUTE STATEMENT 'ALTER TRIGGER TG_STOCKMOVDET ' || strState || ';';
EXECUTE STATEMENT 'ALTER TRIGGER TG_STOCKMOVDET_DEL ' || strState || ';';
...
SUSPEND;
END
Ana Tudela
12-12-2006, 12:04:57
Lo he probado y no me funciona.
No sé si tengo que tener una versión especial de Ibexpert.
Gydba
12-12-2006, 12:27:13
Buenas,
Cómo es eso de que no funciona?!?!?!? Oh oh, mis clientes deben estar volviéndose locos con el stock :)
Quitando un poco de humor, pues mira Ana he creado ese mismo pequeño ejemplo en un server Firebird 1.5.3 y desde un SQL Editor dentro del IBExpert 2004 ejecuto:
EXECUTE PROCEDURE SP_CHANGETRIGGERSTATE(0);
Mas un pequeño COMMIT y los triggers pasan a estado inactivo... no sé realmente cuál es tu duda.
Un abrazo
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.