¿Puedes ayudarme con mi problema sobre el cursor en PL/SQL?

Hola espero me puedas ayudar sobre un cursor en PL/SQL, tengo el siguiente cursor:
Declare
Cursor jh is
select distinct(locn) locn,pno,(sum(bookchg)*-1) tot_fwss,
auddate fecha_f ,(sum(bookchg)*-1)*(landus) costo_fw
from iaudit
where ttype = 219
group by locn,pno,bookchg,landus,auddate;
begin
for fwws in jh loop
update retrob_2
set totmes = fwws.tot_fwss,
fecha_fw = fwws.fecha_f,
costo_u = fwws.costo_fw,
acu_usado = nvl(acu_usado,0) + nvl(fwws.tot_fwss,0)
where tecnico = fwws.locn
and parte = fwws.pno;
end loop;
commit;
end;
/
Este cursor saca unos datos de la tabla IAUDIT y los debe de actualizar en la tabla RETROB_2, la cosa es que solo actualiza el ultimo registro que lee, por ejemplo:
De la tabla IAUDIT tengo estos datos:
select distinct(auddate),locn,sum(bookchg) from iaudit
where locn ='0019'
and pno ='01300067R'
and ttype = 219
group by auddate,locn;
auddat locn sum(bookchg)
------ ----- ------------
020826 0019 -1
020829 0019 -1
020902 0019 -2
020903 0019 -1
020905 0019 -1
020910 0019 -1
020912 0019 -1
020918 0019 -1
Cuando corro el cursor y consulto la tabla RETROB_2 me saca solo esto:
select distinct(fecha_fw),tecnico,sum(totmes) from retrob_2
where tecnico = '0019'
and parte = '01300067R'
group by fecha_fw,tecnico;
FECHA_ TECNI SUM(TOTMES)
------ ----- -----------
020918 0019 1
Como puedes ver solo me actualizo el ultimo que proceso.
En la tabla RETROB_2 tengo estos campos:
Name Null? Type
------------------ -------- ----
Técnico varchar2(5)
SUCURSAL VARCHAR2(7)
GRUPO VARCHAR2(5)
PARTE NOT NULL VARCHAR2(12)
landus number
PRCD VARCHAR2(5)
Físico number
coin number
STQTY NUMBER
RETREQ VARCHAR2(1)
REPIND VARCHAR2(1)
totmes number
DEV_MES NUMBER
SLDNEWS NUMBER
SLDPEND NUMBER
sldioweu number
DADO_MES NUMBER
ACU_USADO NUMBER
ACU_DEV NUMBER
ACU_SLD_PEN NUMBER
FECHA_D DATE
COSTO_D NUMBER
COSTO_U NUMBER
FECHA_FW DATE
La cosa es agregar el registro de LOCN y sus PNO con sus diferentes Fechas, he tratado de insertarlos mediante un insert, pero comoa ves uso acumulados y si los inserto los acumulados no podrían seguir acumulándose.
Podrías ayudarme en esto, ¿cómo hacer un cursor para los actuaize todos los registros que vaya leyendo a al tabla de retrob_2?
Espero me puedas ayudar por que me urge y ya no se que hacer por que ya probé lo que esta a ami alcance, recibe saludos y GRACIAS!

1 respuesta

Respuesta
1
Me da la sensación de que tienes mal definido el cursor:
Cursor jh is
select distinct(locn) locn,pno,(sum(bookchg)*-1) tot_fwss,
auddate fecha_f ,(sum(bookchg)*-1)*(landus) costo_fw
from iaudit
where ttype = 219
group by locn,pno,bookchg,landus,auddate;
En la clausula GRROUP no puedes meter las columnas sobre las que usas funciones de agregación (sum,...), es decir, debes eliminar de dicha clausula el campo: bookchg. Además tampoco puedes poner la columna "landdus" ya que no la estas recuperando de forma independiente en la select.
Así pues la clausula GROUP que debes dejar ha de ser:
"GROUP BY group by locn, pno, auddate".
Además, debes quitar de la clausula SELECT la función "distinct" ya que lo mismo lo haces al poner el campo "locn" en la clausula GROUP BY.
Prueba a ver.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas