Error(4,11): PLS-00323: subprogram or cursor 'INSERTAR' is declared in a package specification and must be defined in the package body.
El codigo completo es este.
Código SQL:
[/CODE]Ver original
/*prueba empleado*/ CREATE OR REPLACE PACKAGE pruebas_empleado AS PROCEDURE inicializar; PROCEDURE insertar (prueba_insertar_empleado IN VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, w_Cuota IN clientes.cuota%TYPE, salidaEsperada IN BOOLEAN); PROCEDURE eliminar (prueba_eliminar_empleado IN VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, salidaEsperada BOOLEAN); PROCEDURE actualizar (prueba_actualizar_empleado IN VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, salidaEsperada BOOLEAN); END pruebas_empleado; / ------- HASTA AQUI TODO SALE BIEN Y NO DA ERROR ---------- CREATE OR REPLACE PACKAGE BODY pruebas_empleado AS /*inicializacion*/ PROCEDURE inicializar AS BEGIN DELETE FROM EMPLEADOS; END inicializar; /*insertar*/ PROCEDURE insertar ( prueba_insertar_empleado VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, salidaEsperada BOOLEAN ) IS salida BOOLEAN := TRUE; num PLS_INTEGER; BEGIN num := 0; /*insertar empleado*/ CREAR_EMPLEADO(wPuesto,wNombre,wApellidos,wSexo,wNIF,wFNac,wSalario,wFInicioContrato); /*seleccionar empleado para ver si se ha insertado correctamente*/ SELECT COUNT(*) INTO num FROM EMPLEADOS WHERE NIF=wNIF; IF (num < 1) THEN salida := FALSE; END IF; COMMIT WORK; DBMS_OUTPUT.put_line (prueba_insertar_empleado || ':' || ASSERT_EQUALS(salida, salidaEsperada)); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line(prueba_insertar_empleado || ':' || ASSERT_EQUALS(FALSE, salidaEsperada)); ROLLBACK; END insertar; /*actualizar*/ PROCEDURE actualizar ( prueba_actualizar_empleado VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, salidaEsperada BOOLEAN) IS num PLS_INTEGER; salida BOOLEAN := TRUE; EMPLEADOS_row EMPLEADOS%ROWTYPE; BEGIN num := 0; /*Actualizar cliente*/ UPDATE EMPLEADOS SET FFinContrato = wFFinContrato WHERE NIF=wnif; SELECT * INTO EMPLEADOS_row FROM EMPLEADOS WHERE NIF=wnif; IF (EMPLEADOS_row.FFinContrato<> wFFinContrato) THEN salida := FALSE; END IF; COMMIT WORK; DBMS_OUTPUT.put_line(prueba_actualizar_empleado || ':' || ASSERT_EQUALS (salida, salidaEsperada)); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line(prueba_actualizar_empleado || ':' || ASSERT_EQUALS (FALSE, salidaEsperada)); ROLLBACK; END actualizar; /*eliminar*/ PROCEDURE eliminar ( prueba_eliminar_empleado VARCHAR, wPuesto IN puestos.oid_pue%TYPE, wNombre IN empleados.nombre%TYPE, wApellidos IN empleados.apellidos%TYPE, wSexo IN empleados.sexo%TYPE, wNIF IN empleados.nif%TYPE, wFNac IN empleados.fnac%TYPE, wSalario IN empleados.salario%TYPE, wFInicioContrato IN empleados.finiciocontrato%TYPE, wFFinContrato IN empleados.ffincontrato%TYPE, salidaEsperada BOOLEAN) IS salida BOOLEAN := FALSE; num PLS_INTEGER; BEGIN num := 0; /*eliminar empleado*/ DELETE FROM EMPLEADOS WHERE NIF=wNIF; SELECT COUNT (*) INTO num FROM EMPLEADOS WHERE NIF=wNIF; IF (num < 1) THEN salida := FALSE; ELSE salida := TRUE; END IF; COMMIT WORK; DBMS_OUTPUT.put_line (prueba_eliminar_empleado || ':' || ASSERT_EQUALS (salida, salidaEsperada)); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (prueba_eliminar_empleado || ':' || ASSERT_EQUALS (FALSE, salidaEsperada)); ROLLBACK; END eliminar; END; / /*funcion auxiliar ASSERT_EQUALS*/ CREATE OR REPLACE FUNCTION ASSERT_EQUALS (salida BOOLEAN, salidaEsperada BOOLEAN) RETURN varchar2 AS BEGIN IF (salida=salidaEsperada) THEN RETURN 'exito'; ELSE RETURN 'fallo'; END IF; END ASSERT_EQUALS;
Gracias de antemano y Feliz Año.