Universidad Tecnológica de Panamá
Facultad de Sistema de Computacionales
Licenciatura de Ingeniería de Software
Implementacion de Base de Datos II
Laboratorio N°4
Profesor: Henry Lezcano
Estudiante:
Jhonathan Vargas 20-58-7117
Salón: 1SF131
CASO NO. 1
Implementación Procesos Almacenados de Base de Datos
Una pequeña compañía desea tener sus colaboradores almacenados en una base de datos
en una tabla llamada colaboradores.
Los colaboradores pueden en algún momento estar (A= Activos, I=Inactivos ,
V=Vacaciones)
• Construir un procedimiento almacenado que permita la carga de los colaboradores
en la base de datos. El mismo debe ser invocado con los parámetros necesarios
para la carga.
Colaboradores ( id_colaborador number PK, nombre varchar2(25), aplellido
varchar2(25), cedula varchar2, salariomensual number(15,2), fechaingreso date,
status char).
• Construir un procedimiento almacenado que permita implementar un cursor sobre
la tabla de colaboradores para realizador el cálculo del salario quincenal de estos,
donde debe preliminarmente haber creado:
1. Una función que realice el cálculo del salario quincenal.
2. Una función que realice el cálculo del seguro educativo (1.25%).
3. Una función que realice el cálculo del seguro social (9.75%)
4. Una función que realice el cálculo del salario neto quincenal.
• Este procedimiento debe cargar la relación pagoquincenal durante el proceso.
Pagoquincena ( id_colaborador number pk salariobruto number(15,2), salarioneto
number(15,2), seguroeducativo number(15,2), segurosocial number(15,2), fechapago
date)
Nota: solo se le paga la quincena a los colaboradores que están activos.
Crear la tabla "colaboradores":
CREATE TABLE colaboradores (
id_colaborador NUMBER PRIMARY KEY,
nombre VARCHAR2(25),
apellido VARCHAR2(25),
cedula VARCHAR2(15),
salariomensual NUMBER(15,2),
fechaingreso DATE,
status CHAR(1)
);
Crear el procedimiento almacenado para cargar colaboradores en la tabla:
CREATE OR REPLACE PROCEDURE cargar_colaborador (
p_id_colaborador IN NUMBER,
p_nombre IN VARCHAR2,
p_apellido IN VARCHAR2,
p_cedula IN VARCHAR2,
p_salariomensual IN NUMBER,
p_fechaingreso IN DATE,
p_status IN CHAR
) AS
BEGIN
INSERT INTO colaboradores (
id_colaborador,
nombre,
apellido,
cedula,
salariomensual,
fechaingreso,
status
) VALUES (
p_id_colaborador,
p_nombre,
p_apellido,
p_cedula,
p_salariomensual,
p_fechaingreso,
p_status
);
COMMIT;
END;
/
Crear las funciones necesarias para el cálculo del salario quincenal, seguro educativo,
seguro social y salario neto quincenal:
CREATE OR REPLACE FUNCTION calcular_salario_quincenal (
p_salariomensual IN NUMBER
) RETURN NUMBER IS
salario_quincenal NUMBER(15,2);
BEGIN
salario_quincenal := p_salariomensual / 2; -- Se asume que una quincena es la mitad
del salario mensual
RETURN salario_quincenal;
END;
CREATE OR REPLACE FUNCTION calcular_seguro_educativo (
p_salario_quincenal IN NUMBER
) RETURN NUMBER IS
seguro_educativo NUMBER(15,2);
BEGIN
seguro_educativo := p_salario_quincenal * 0.0125; -- 1.25% del salario quincenal
RETURN seguro_educativo;
END;
CREATE OR REPLACE FUNCTION calcular_seguro_social (
p_salario_quincenal IN NUMBER
) RETURN NUMBER IS
seguro_social NUMBER(15,2);
BEGIN
seguro_social := p_salario_quincenal * 0.0975; -- 9.75% del salario quincenal
RETURN seguro_social;
END;
CREATE OR REPLACE FUNCTION calcular_salario_neto_15 (
p_salario_quincenal IN NUMBER,
p_seguro_educativo IN NUMBER,
p_seguro_social IN NUMBER
) RETURN NUMBER IS
salario_neto_quincenal NUMBER(15,2);
BEGIN
salario_neto_quincenal := p_salario_quincenal - p_seguro_educativo -
p_seguro_social;
RETURN salario_neto_quincenal;
END;
Crear el procedimiento almacenado que implemente el cálculo del salario quincenal y
cargue la tabla "pagoquincena":
CREATE OR REPLACE PROCEDURE calcular_cargar_pago_quincenal IS
CURSOR colaboradores_cursor IS
SELECT *
FROM colaboradores
WHERE status = 'A'; -- Solo colaboradores activos
colaborador colaboradores%ROWTYPE;
BEGIN
FOR colaborador IN colaboradores_cursor LOOP
DECLARE
salario_quincenal NUMBER(15,2);
seguro_educativo NUMBER(15,2);
seguro_social NUMBER(15,2);
salario_neto_quincenal NUMBER(15,2);
BEGIN
salario_quincenal := calcular_salario_quincenal([Link]);
seguro_educativo := calcular_seguro_educativo(salario_quincenal);
seguro_social := calcular_seguro_social(salario_quincenal);
salario_neto_quincenal := calcular_salario_neto_quincenal(salario_quincenal,
seguro_educativo, seguro_social);
INSERT INTO pagoquincena (id_colaborador, salariobruto, salarioneto,
seguroeducativo, segurosocial, fechapago)
VALUES (colaborador.id_colaborador, salario_quincenal, salario_neto_quincenal,
seguro_educativo, seguro_social, SYSDATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
END LOOP;
END;