Está en la página 1de 3

declare

v_codigo_error number(5);
v_mensaje_error varchar(70);

CURSOR c_vacunatorio IS
SELECT
id_vacunatorio vacunatorio
FROM
vacunatorio;

CURSOR c_empleados (
p_id_vacunatorio VARCHAR2
) IS
SELECT
CASE
WHEN to_char(sysdate,'mm') < 10 THEN replace(to_char(sysdate,'mm'),'0','')
ELSE to_char(sysdate,'mm') END mes,
to_char(sysdate,'yyyy') annio,
numrun_emp run,
id_vacunatorio id_vacunatorio,
sueldo_base_emp sueldo,
round(MONTHS_BETWEEN(SYSDATE,fecing_emp)/12) annios_tr,
id_escolaridad id_esc
FROM
empleado
WHERE
id_vacunatorio = p_id_vacunatorio;
v_contador number(2):=0;
v_annios_tr number(8);
v_carga_f number(8):=0;
v_test number(2);
v_fijo number(4);
v_capa number(8);
v_asig_esc number(8);
v_movil number(1);
v_totalh number(8);
BEGIN
FOR r_vacunatorio IN c_vacunatorio LOOP

FOR r_empleado IN c_empleados(r_vacunatorio.vacunatorio) LOOP


v_contador := v_contador + 1;

v_annios_tr := CASE WHEN r_empleado.annios_tr BETWEEN 10 and 14


THEN r_empleado.sueldo * (4/100)
WHEN r_empleado.annios_tr BETWEEN 15 and 18
THEN r_empleado.sueldo * (6/100)
WHEN r_empleado.annios_tr BETWEEN 19 and 22
THEN r_empleado.sueldo * (8/100)
WHEN r_empleado.annios_tr BETWEEN 23 and 26
THEN r_empleado.sueldo * (10/100)
WHEN r_empleado.annios_tr BETWEEN 27 and 30
THEN r_empleado.sueldo * (12/100)
WHEN r_empleado.annios_tr BETWEEN 31 and 34
THEN r_empleado.sueldo * (14/100)
else 0
END;
v_carga_f := 0 * 85000;
v_test := 1;
v_capa := 0;
v_fijo := 9500;
v_asig_esc := CASE WHEN r_empleado.id_esc = 10 THEN
r_empleado.sueldo * (2/100)
WHEN r_empleado.id_esc = 20 THEN r_empleado.sueldo * (4/100)
WHEN r_empleado.id_esc = 30 THEN r_empleado.sueldo * (6/100)
WHEN r_empleado.id_esc = 40 THEN r_empleado.sueldo * (8/100)
WHEN r_empleado.id_esc = 50 THEN r_empleado.sueldo *
(10/100)
WHEN r_empleado.id_esc = 60 THEN r_empleado.sueldo *
(12/100)
else 0
END;

v_movil := 0;
v_totalh := r_empleado.sueldo + v_carga_f + v_fijo +
v_annios_tr + v_asig_esc + v_movil;

begin
INSERT INTO beneficios_calc_mes (
mes_proc,
anno_proc,
numrun_emp,
id_vacunatorio,
valor_sueldo_base,
valor_asig_annos,
valor_cargas_fam,
test_pcr,
valor_capac,
valor_colacion,
valor_asig_escolar,
valor_tot_haberes
) VALUES (
r_empleado.mes,
r_empleado.annio,
r_empleado.run,
r_empleado.id_vacunatorio,
r_empleado.sueldo,
v_annios_tr,
v_carga_f,
v_test,
v_capa,
v_fijo,
v_asig_esc,
v_totalh
);

--este insert da error


INSERT INTO resumen_beneficios_mes (
id_vacunatorio,
mes_proc,
anno_proc,
total_emp,
total_emp_asig_annos,
total_emp_asig_cfam,
total_emp_test_pcr,
valor_tot_haberes
) VALUES (
r_empleado.id_vacunatorio,
r_empleado.mes,
r_empleado.annio,
v_contador,
v_test,
v_test,
v_test,
v_totalh
);

EXCEPTION
WHEN OTHERS THEN
v_codigo_error := SQLCODE;
v_mensaje_error := SQLERRM;
INSERT INTO error_proceso VALUES(
seq_error.nextval,
v_codigo_error ,
v_mensaje_error
);
end;

end loop;
end loop;
end;

También podría gustarte