Oracle - Mal procedimiento

 
Vista:

Mal procedimiento

Publicado por Andres (6 intervenciones) el 10/06/2009 18:25:43
Tengo un problema en alguna parte del sig. codigo tengo un error y no lo encuentro me podrian ayudar donde es el error, cual es el error???, es que al generar el reporte los valores no coinciden con la fecha es decir, a los 5 dias de vencimiento me debe asomar en la columna "capital vencido" el vaslor de la cuota no pagada y le reviso el codigo y no encuentro error

CREATE OR REPLACE PROCEDURE CRECERA.Calificacion(pfecha IN DATE) IS
CURSOR Creditos (pfecha IN DATE) IS
SELECT credito, calificacion, clase, diasv
FROM TCR_SALDOS
WHERE fecha = pfecha ;
CURSOR Rangos(pcodigo IN NUMBER) IS
SELECT relacion FROM TSR_CATALOGO_ITEM
WHERE codigos = pcodigo;
lcalificacion CHAR(1);
i NUMBER;
capital Cope_Cr.Number_Array;
vencido Cope_Cr.Number_Array;
nac Cope_Cr.Number_Array;
intven Cope_Cr.Number_Array;
rango1 Cope_Cr.Number_Array;
rango2 Cope_Cr.Number_Array;
rango3 Cope_Cr.Number_Array;
rango4 Cope_Cr.Number_Array;
rango6 Cope_Cr.Number_Array;
rango7 Cope_Cr.Number_Array;
rango8 Cope_Cr.Number_Array;
rango9 Cope_Cr.Number_Array;
g_prova NUMBER := 0.01;--0.015; -- 2/100;
g_provb NUMBER := 0.05;--0.13; -- 6/100;
g_provc NUMBER := 0.20; --0.34; -- 20/100;
g_provd NUMBER := 0.50; --0.6752; -- 50/100;
g_prove NUMBER := 1;
BEGIN
i:= 1;
FOR reg IN Rangos(321) LOOP
rango1(i) := reg.relacion;
i:= i+1;
END LOOP;
i:= 1;
FOR reg IN Rangos(322) LOOP
rango2(i) := reg.relacion;
i:= i+1;
END LOOP;
i:= 1;
FOR reg IN Rangos(323) LOOP
rango3(i) := reg.relacion;
i:= i+1;
END LOOP;
i:= 1;
FOR reg IN Rangos(324) LOOP
rango4(i) := reg.relacion;
i:= i+1;
END LOOP;
g_prova := 0.01;
g_provb := 0.05;
g_provc := 0.20;
g_provd := 0.50;
g_prove := 1.0;
FOR reg IN Creditos(pfecha) LOOP
reg.diasv := Cope_Cr.of_dias_vencido(reg.credito, pfecha);
IF reg.clase = 1 THEN
IF reg.diasv <= rango1(1) THEN
lcalificacion := 'A';
ELSIF reg.diasv > rango1(1) AND reg.diasv <= rango1(2) THEN
lcalificacion := 'B';
ELSIF reg.diasv > rango1(2) AND reg.diasv <= rango1(3) THEN
lcalificacion := 'C';
ELSIF reg.diasv > rango1(3) AND reg.diasv <= rango1(4) THEN
lcalificacion := 'D';
ELSIF reg.diasv > rango1(4) THEN
lcalificacion := 'E';
END IF;
END IF;
IF reg.clase = 2 THEN
IF reg.diasv <= rango2(1) THEN
lcalificacion := 'A';
ELSIF reg.diasv > rango2(1) AND reg.diasv <= rango2(2) THEN
lcalificacion := 'B';
ELSIF reg.diasv > rango2(2) AND reg.diasv <= rango2(3) THEN
lcalificacion := 'C';
ELSIF reg.diasv > rango2(3) AND reg.diasv <= rango2(4) THEN
lcalificacion := 'D';
ELSIF reg.diasv > rango2(4) THEN
lcalificacion := 'E';
END IF;
END IF;
IF reg.clase = 3 THEN
IF reg.diasv <= rango3(1) THEN
lcalificacion := 'A';
ELSIF reg.diasv > rango3(1) AND reg.diasv <= rango3(2) THEN
lcalificacion := 'B';
ELSIF reg.diasv > rango3(2) AND reg.diasv <= rango3(3) THEN
lcalificacion := 'C';
ELSIF reg.diasv > rango3(3) AND reg.diasv <= rango3(4) THEN
lcalificacion := 'D';
ELSIF reg.diasv > rango3(4) THEN
lcalificacion := 'E';
END IF;
END IF;
IF reg.clase = 4 THEN
IF reg.diasv <= rango4(1) THEN
lcalificacion := 'A';
ELSIF reg.diasv > rango4(1) AND reg.diasv <= rango4(2) THEN
lcalificacion := 'B';
ELSIF reg.diasv > rango4(2) AND reg.diasv <= rango4(3) THEN
lcalificacion := 'C';
ELSIF reg.diasv > rango4(3) AND reg.diasv <= rango4(4) THEN
lcalificacion := 'D';
ELSIF reg.diasv > rango4(4) THEN
lcalificacion := 'E';
END IF;
END IF;
UPDATE TCR_SALDOS
SET calificacion = lcalificacion,
provision = decode(lcalificacion,'A', capreducido*0.01, 'B', capreducido*0.05, 'C', capreducido*0.20, 'D', capreducido*0.50, capreducido),
diasv = reg.diasv
WHERE credito = reg.credito AND fecha = pfecha;
END LOOP;
commit;
END;
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