PDA

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