PDA

Ver la Versión Completa : Problemas con Script SQL y la herramienta ISQL


Triton
14-06-2004, 13:17:42
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:


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


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.


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
Muchas Gracias, ahora parece que funciona.

Me devuelve esta línea:

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 :)