Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problemas con Script SQL y la herramienta ISQL (https://www.clubdelphi.com/foros/showthread.php?t=11425)

Triton 14-06-2004 13:17:42

Problemas con Script SQL y la herramienta ISQL
 
Hola a todos, estoy intentando hacer un BATCH para pasar un procesillo SQL pero a la hora de ejecutarlo me da error.

El proceso es el siguiente:

Código:

create procedure BORRA_DUPLICADOS
as
declare variable empresa smallint;
declare variable almacen varchar(3);
declare variable fecha date;
declare variable articulo varchar(15);
declare variable tipo varchar (1);
declare variable aux smallint;
begin

  for select count(*),empresa,almacen,fecha,articulo,tipo
  from art_articulos_hist_precios
  group by empresa,almacen,fecha,articulo,tipo
  having count(*)>1
  into :aux,:empresa,:almacen,:fecha,:articulo,:tipo
  do begin

    delete
    from art_articulos_hist_precios
    where empresa=:empresa and
          almacen=:almacen and
          articulo=:articulo and
          tipo=:tipo ;

  end
end;

commit work;

execute procedure BORRA_DUPLICADOS;

commit work;

drop procedure BORRA_DUPLICADOS;

commit work;

A continuación os pongo la lína de comando que va en el BATCH

Código:

cd c:\archivos de programa\interbase corp\interbase\bin
isql [base de datos] -i [fichero sql] -u SYSDBA -p password

Mi duda es si el SCRIPT que he creado funciona (es decir, su estructura en si). Ya que los pasos de este fichero por separado desde IBExpert fuciona correctamente.

Salu2 y gracias a todos desde ya
;)

guillotmarc 14-06-2004 14:29:37

Hola, tienes que cambiar los terminadores de instrucción al crear el procedimiento almacenado. (Normalmente se suele usar el signo ^). Puesto que el cuerpo del procedimiento almacenado contiene signos de ;, que confunden la ejecución del script, pensando que la siguiente instrucción solo llega hasta ese símbolo.

Código:

set term ^ ;
 
create procedure BORRA_DUPLICADOS
as
declare variable empresa smallint;
declare variable almacen varchar(3);
declare variable fecha date;
declare variable articulo varchar(15);
declare variable tipo varchar (1);
declare variable aux smallint;
begin
 
for select count(*),empresa,almacen,fecha,articulo,tipo
from art_articulos_hist_precios
group by empresa,almacen,fecha,articulo,tipo
having count(*)>1
into :aux,:empresa,:almacen,:fecha,:articulo,:tipo
do begin
 
  delete
  from art_articulos_hist_precios
  where empresa=:empresa and
  almacen=:almacen and
  articulo=:articulo and
  tipo=:tipo ;
 
end
end
^
set term ; ^
 
commit work;
 
execute procedure BORRA_DUPLICADOS;
 
commit work;
 
drop procedure BORRA_DUPLICADOS;
 
commit work;

Saludos.

Triton 14-06-2004 16:35:53

Gracias
 
Muchas Gracias, ahora parece que funciona.

Me devuelve esta línea:

Código:

Expected end of statement, encountered EOF
¿Se podría cambiar este mensaje por otro?. De todas maneras no me es prioritario, simplemente por curiosidad.

Gracias :)


La franja horaria es GMT +2. Ahora son las 19:23:39.

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