procemiento pl/sql
tema enviado por ja en ORACLE
tema iniciado el 03/06/2009
Mi procedimiento es liquidar una nomina lo que pasa es no lo he podido terminar no se como terminar los otros dos cursores y mandar todas las respuestas a una nueva tabla que se llama rh_liquidacion y me salen unos errores que ni idea como solucionarlos si me pueden colaborar gracias....
CREATE OR REPLACE PROCEDURE liquidacion_nomina
--FECHA DE CREACION :22/05/2009
--FINALIDAD: LIQUIDAR NOMINA DE LA COMPAÑIA ALMACENES EXITO
--CREADO POR: ANDREA TORRES MEYER BECERRA
(
pv_Compania_Codigo IN gn_compania.compania_codigo%TYPE,
pv_Mes IN VARCHAR2,
pv_Ano IN VARCHAR2
) IS
-- declaracion de variables
ldt_Periodo DATE;
lv_Codigo_Sucursal gn_sucursal.sucursl_codigo%TYPE;
lv_Codigo_Dependencia gn_dependencia.dependencia_codigo%TYPE;
lv_Codigo_Empleado rh_nomina.empleado_codigo%TYPE;
lv_Cedula rh_nomina.hoj_vid_cedula%TYPE;
-- declaracion de cursores
CURSOR cursor_empleados
(
cv_Compania_Codigo IN gn_compania.compania_codigo%TYPE
) IS
SELECT
a.sucursl_codigo,
b.dependencia_codigo,
c.empleado_codigo,
c.hoj_vid_cedula,
FROM gn_sucursal a
INNER JOIN gn_dependencia b ON
b.sucursl_codigo = a.sucursl_codigo
INNER JOIN rh_nomina c ON
c.dependencia_codigo = b.dependencia_codigo
WHERE
a.compania_codigo = cv_Compania_Codigo;
CURSOR cursor_conceptos
(
cv_Empleado_Codigo IN rh_concpts_empld.empleado_codigo%TYPE,
cdt_Periodo DATE
) IS
SELECT
b.concepto_codigo,
b.concepto_detalle,
b.concpt_natrlz,
a.valor*CASE WHEN b.concpt_natrlz = 'DV' THEN 1 ELSE -1 END AS valor_neto
FROM rh_concpts_empld a
INNER JOIN rh_conceptos b ON
b.concepto_codigo = a.concepto_codigo
WHERE
a.empleado_codigo = cv_Empleado_Codigo AND
a.fecha_inicio < ADD_MONTHS(cdt_Periodo,1)
ORDER BY
b.concpt_natrlz DESC,
b.concepto_codigo;
CURSOR cursor_novedades
(
cv_Empleado_Codigo IN rh_concpts_empld.empleado_codigo%TYPE,
cdt_Periodo DATE
) IS
SELECT
b.concepto_codigo,
b.concepto_detalle,
b.concpt_natrlz,
a.valor_novdd*CASE WHEN b.concpt_natrlz = 'DV' THEN 1 ELSE -1 END AS valor_neto
FROM rh_novedades a
INNER JOIN rh_conceptos b ON
b.concepto_codigo = a.concepto_codigo
WHERE
a.empleado_codigo = cv_Empleado_Codigo AND
-- b.fech_liqdcn BETWEEN cdt_Periodo AND ADD_MONTHS(cdt_Periodo,1)-1
TRUNC(a.fech_liqdcn,'MM') = cdt_Periodo
ORDER BY
b.concpt_natrlz DESC,
b.concepto_codigo;
BEGIN
ldt_Periodo := TO_DATE(pv_Mes||pv_Ano,'MMYYYY');
OPEN cursor_empleados(pv_Compania_Codigo);
LOOP
FETCH cursor_empleados INTO
lv_Codigo_Sucursal,
lv_Codigo_Dependencia,
lv_Codigo_Empleado,
lv_Cedula;
EXIT WHEN cursor_empleados%NOTFOUND;
dbms_output.put('lv_Codigo_Sucursal = '||lv_Codigo_Sucursal);
dbms_output.put('lv_Codigo_Dependencia = '||lv_Codigo_Dependencia);
dbms_output.put('lv_Codigo_Empleado = '||lv_Codigo_Empleado);
dbms_output.put_line('lv_Cedula = '||lv_Cedula);
/* BEGIN
OPEN cursor_conceptos
LOOP
FETCH INTO ;
EXIT WHEN %NOTFOUND;
INSERT INTO TABLA
(COIL1,COL2)
VALUES
(VAR1,VAR2);
BEGIN
END;
END LOOP;
CLOSE
END;
BEGIN
OPEN cursor_novedades
LOOP
FETCH INTO ;
EXIT WHEN %NOTFOUND;
BEGIN
END;
END LOOP;
CLOSE
END;
*/
END LOOP;
CLOSE cursor_empleados;
EXCEPTION
WHEN OTHERS THEN
BEGIN
NULL;
END;
END liquidacion_nomina;
-- --------------------
---FIN DE PROCEDIMIENTO
-- --------------------