SQL - Problemas con la ejecucion de un cursor

 
Vista:

Problemas con la ejecucion de un cursor

Publicado por Carolina (1 intervención) el 23/03/2007 22:39:58
Hola a todos tengo el siguiente problema con este query:

Use rendicdw_paso

DECLARE @ORDEN BIGINT
DECLARE @PLU BIGINT
DECLARE @Q_PED FLOAT
DECLARE @FEC_ped SMALLDATETIME
DECLARE @Q_REC FLOAT
DECLARE @cto_REC FLOAT
DECLARE @FEC_rec SMALLDATETIME
declare @Q_out float
declare @Cto_out float
declare @Q_in float
declare @Cto_in float
declare @Cto_ped float
declare @Q_exc float
declare @Cto_exc float
declare @Count bigint
declare @Cond int

DECLARE cursor1 CURSOR FOR
SELECT
h.odrnor,H.odrplu, H.odrcpe,H.odrfen,H.odrccope
FROM PASO_HEC_NIVELSERVICIO_PRUEBA2 H
ORDER BY h.odrnor,H.odrplu
FOR UPDATE;

OPEN cursor1;

FETCH NEXT FROM cursor1 INTO @ORDEN,@PLU,@Q_PED,@FEC_PED,@Cto_ped
set @Count=0
WHILE (@@FETCH_STATUS =0)
BEGIN
DECLARE cursor2 CURSOR FOR
SELECT
odrffo,odrcre,odrcco
FROM dbo.paso_compras_pedidos
where
odrnor=@ORDEN
and odrplu=@PLU
ORDER BY odrffo,odrfol;

open cursor2;
FETCH NEXT FROM cursor2 INTO @FEC_rec,@Q_REC,@cto_REC;
set @Q_out = 0;
set @Cto_out = 0;
set @Q_in = 0;
set @Cto_in = 0;
set @Q_exc = 0;
set @Cto_exc = 0;
set @Q_REC=isnull(@Q_REC,0);
set @cto_REC=isnull(@cto_REC,0)

WHILE (@@FETCH_STATUS =0)
begin
if @FEC_rec > @FEC_ped
begin
set @Cond=2;
set @Q_out = @Q_out + @Q_REC;
set @Cto_out = @Cto_out + @Q_REC*@cto_REC;
end
else
begin
set @Cond=1;
set @Q_in = @Q_in + @Q_REC;
set @Cto_in = @Cto_in + @cto_REC*@Q_REC;
end;

if (@Q_in + @Q_out - @Q_PED) > 0
begin
set @Cond= @Cond*10;
set @Q_exc = @Q_in + @Q_out - @Q_PED;
set @Cto_exc = @Cto_in + @Cto_out - @Cto_ped;
end;

set @Count= @Count + 1;

print N'Contador :=' + rtrim(@Count) + ',@Q_PED='+ rtrim(@Q_PED) + ',@Cond='+ rtrim(@Cond) + ',@Q_REC='+isnull(rtrim(@Q_REC),'null')+',@Q_in='+isnull(rtrim(@Q_in),'null')+',@Q_out='+isnull(rtrim(@Q_out),'null')+',@Q_exc='+isnull(rtrim(@Q_exc),'null');
FETCH NEXT FROM cursor2 INTO @FEC_rec,@Q_REC,@cto_REC
end


CLOSE CURSOR2;
DEALLOCATE cursor2;

begin transaction
UPDATE PASO_HEC_NIVELSERVICIO_PRUEBA2 SET
odrqre_out =@Q_out
,odrcre_out =@Cto_out
,odrqre_in =@Q_in
,odrcre_in =@Cto_in
,odrqre_in_exc =@Q_exc
,odrcre_in_exc =@Cto_exc
,procesado = @Count


WHERE CURRENT OF cursor1;
commit transaction
FETCH NEXT FROM cursor1 INTO @ORDEN,@PLU,@Q_PED,@FEC_ped,@Cto_ped;

END;

CLOSE cursor1;
DEALLOCATE cursor1;
____________________________________________________________________

Si lo ejecuto me dice The cursor is Read Only

y al sacar la parte donde hace el update me muestra los valores que quiero actualizar...he leido bastante acerca de los cursores...pero no se que esta mal???? si alguien me puede ayudar lo agradeceria mucho....

Saludos.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con la ejecucion de un cursor

Publicado por Isaias (5072 intervenciones) el 24/03/2007 00:12:31
Casi el 99.99% de las cosas que se hacen con cursores, se pueden hacer con T-SQL, si bien entiendo, armas un primer cursor con registros de la tabla PASO_HEC_NIVELSERVICIO_PRUEBA2, despues armas un segundo cursor con registros de la tabla paso_compras_pedidos, solo para hacer CIERTOS CALCULOS y actualizar tu tabla PASO_HEC_NIVELSERVICIO_PRUEBA2

¿Ese es el objetivo?

¿Porque no hacerlo con un SIMPLE UPDATE FROM....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con la ejecucion de un cursor

Publicado por Carolina (26 intervenciones) el 24/03/2007 00:29:19
La verdad estoy tratando de armar algo...lo que necesito es que busque el odrnor y odrplu en toda la tabla paso_compras_pedidos y actualice los valores de calculo en la PASO_HEC_NIVELSERVICIO_PRUEBA2 lo que me ha costado es la parte de los calculos entre las dos tablas...si me puedes ayudar....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con la ejecucion de un cursor

Publicado por Isaias (5072 intervenciones) el 25/03/2007 03:44:01
Te he dado una respuesta a tu correo electronico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar