Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Execute Block en un IBScript (https://www.clubdelphi.com/foros/showthread.php?t=82414)

gluglu 05-03-2013 17:54:59

Execute Block en un IBScript
 
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.

Código Delphi [-]
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

Código Delphi [-]
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

Código Delphi [-]
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 :
Código SQL [-]
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 :

Código SQL [-]
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 !!


La franja horaria es GMT +2. Ahora son las 01:59:15.

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