PDA

Ver la Versión Completa : Execute Block en un IBScript


gluglu
05-03-2013, 17:54:59
Hola a tod@s !!

... si, si, ya sé .... estoy un poco perdido ... pero siempre os tengo a todos y al foro en general muy presente !

Ahí va un nuevo problemita :

Necesito ejecutar un EXECUTE BLOCK en un TIBScript.

EXECUTE BLOCK
AS
DECLARE VARIABLE VAR_A BIGINT;
DECLARE VARIABLE VAR_B BIGINT;
BEGIN
For Select VALUEA, VALUEB from TEMP_SCRIPT
into :VAR_A, :VAR_B
do
Update AVAIL_WEB_XML_UPDATES
Set CHANNELMANAGER_INTNO = :VAR_B
where INTERNALNO = :VAR_A;
END;

Me acabo de dar cuenta que al ir terminada cada línea del Execute Block con un carácter ';', pues el IBScript lo toma como líneas independientes a ejecutar.

Cambiar el ';' por otro carácter diferente en IBScript.Terminator sería una solución probablemente, pero ello me llevaría a cambiar MILES de líneas de otros script's diferentes para reemplazar el ';' por cualquier otro carácter.

... y sólo por este dichoso Execute Block.

Cómo se podría enfocar ??

Gracias como siempre por vuestra ayuda.

gluglu
05-03-2013, 18:17:56
SET TERM #;
EXECUTE BLOCK
AS
DECLARE VARIABLE VAR_A BIGINT;
DECLARE VARIABLE VAR_B BIGINT;
BEGIN
For Select VALUEA, VALUEB from TEMP_SCRIPT
into :VAR_A, :VAR_B
do
Update AVAIL_WEB_XML_UPDATES
Set CHANNELMANAGER_INTNO = :VAR_B
where INTERNALNO = :VAR_A;
END#
SET TERM ;#

... vaya ... como siempre.

Pongo la pregunta y encuentro la respuesta.

Ahora lo que ocurre es que parece que al componente IBScript no le parece correcto :VAR_A ya que me devuelve Token Unknown Line 7, Column 14.

gluglu
05-03-2013, 18:32:25
SET TERM #;
EXECUTE BLOCK
AS
DECLARE VARIABLE VAR_A BIGINT;
DECLARE VARIABLE VAR_B BIGINT;
BEGIN
For Select VALUEA, VALUEB from TEMP_SCRIPT
into VAR_A, VAR_B
do
Update AVAIL_WEB_XML_UPDATES
Set CHANNELMANAGER_INTNO = :VAR_B
where INTERNALNO = :VAR_A;
END
#
SET TERM ;#

Quitándole los : a las variables Var_A y Var_B en el For .. Select, parece que no da ese error, pero ahora el error es :
Dynamic SQL Error
SQL error code = -901
undefined message number

En todo momento anterior, cualquiera de los Execute Block que he mencionado en este post, funcionan correctamente en el IBExpert al ejecutar el Script.

gluglu
05-03-2013, 20:07:28
... al final he decidido sustituir el EXECUTE BLOCK anterior por :

UPDATE AVAIL_WEB_XML_UPDATES AWXU
SET
CHANNELMANAGER_INTNO = (Select VALUEB from TEMP_SCRIPT TS where TS.VALUEA = AWXU.INTERNALNO)
WHERE EXISTS (Select 1 from TEMP_SCRIPT TS where TS.VALUEA = AWXU.INTERNALNO);

;) ;)

radenf
05-03-2013, 20:54:35
Me encantó tu monólogo.
Saludos

gluglu
06-03-2013, 09:21:54
:D :D ... si ya ví que al final ha sido un verdadero monólogo. Espero al menos que a alguien le sirva algún día !!