Está en la página 1de 12

1. Con el script adjunto <<PLANILLA.

SQL>> construya un esquema/usuario propietario denominado


“PLANILLA” para ejecutar el script y a continuación escriba un procedimiento denominado
“GENERAR_PLANILLA” con las siguientes condiciones: (3 puntos)

a. Debe utilizar un solo parámetro: la descripción de la planilla


b. Debe utilizar un cursor para la tabla empleado; este servirá para generar la planilla con
todos los empleados.
c. Debe insertar un registro de planilla en la tabla PLANILLA, observe su estructura.
d. No olvide abrir y cerrar el cursor cuando corresponda, así como recuperar la información del
mismo.
e. Debe determinar la suma del valor de bono por empleado
f. Debe determinar la suma de valor de descuento por empleado
g. Con las sumas obtenidas debe determinar el líquido a pagar por empleado
h. Con los datos obtenidos en los pasos anteriores, insertar un registro en el detalle de planilla;
observe la estructura de la tabla PLANILLA_EMP.
i. El devengado es la suma del salario base + bonos
ii. El líquido es la suma del salario base + bonos - descuentos.
CREATE OR REPLACE PROCEDURE "GENERAR_PLANILLA"(descripcion varchar2) AS
cursor CursorEmpleado is select* from empleado;

Cod_Empleado NUMBER;
NombreEmpleado empleado.nombre_emp%TYPE;
salario empleado.salario%TYPE;
fecha DATE;
SumatoriaBono NUMBER;
SumatoriaDescuentos NUMBER;
devengado NUMBER;
TotalLiquido NUMBER;
BEGIN
insert into PLANILLA (DESC_PLANILLA, FECHA) values (descripcion, sysdate);
OPEN CursorEmpleado;
LOOP
FETCH CursorEmpleado into Cod_Empleado, NombreEmpleado, salario, fecha;
EXIT WHEN CursorEmpleado%NOTFOUND;

SELECT SUM(BonoEmp.valor_bono) into SumatoriaBono


FROM emp_bono BonoEmp, bono bo
WHERE BonoEmp.id_bono = bo.id_bono AND Cod_Empleado = BonoEmp.id_emp
GROUP BY BonoEmp.id_emp
ORDER BY BonoEmp.id_emp;

SELECT SUM(DescuentoEmpleado.valor_descuento) into SumatoriaDescuentos


FROM emp_descuento DescuentoEmpleado, Descuento descu
WHERE DescuentoEmpleado.id_descuento = descu.id_descuento AND Cod_Empleado = DescuentoEmpleado.id_emp
GROUP BY DescuentoEmpleado.id_emp
ORDER BY DescuentoEmpleado.id_emp;

devengado := salario + SumatoriaBono;

TotalLiquido := devengado - SumatoriaDescuentos;

insert into PLANILLA_EMP(ID_PLANILLA, ID_EMP, DEVENGADO, DESCUENTO, LIQUIDO)


values (21,Cod_Empleado, devengado, SumatoriaDescuentos, TotalLiquido);

END LOOP;
CLOSE CursorEmpleado;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('Error al ejecutar');
ROLLBACK;
END GENERAR_PLANILLA;

a. Conectarse con el usuario propietario “PLANILLA” a la pluggable seleccionada para trabajar.


b. Crear un rol PLANILLERO con permisos de conexión a la base de datos y privilegios para
consultar e insertar PLANILLA, además que tenga privilegios para ejecutar el procedimiento
GENERAR_PLANILLA.
c. Un rol SUPERVISOR con permisos de conexión a la base de datos y privilegios sobre los
procedimientos ENROLAR_EMPLEADO y ENROLAR_TODOS además que tenga privilegios de
consulta, insertar, modificar y eliminar en las tablas EMPLEADO, PLANILLA y PLANILLA_EMP.
d. Crear dos usuarios denominados JosePerez y JuanPerez; asignarles el rol de planillero y
supervisor respectivamente.
e. Conectar con el usuario JosePerez y ejecutar el procedimiento PLANILLA.GENERAR_PLANILLA.
f. Borrar los registros de la tabla PLANILLA_EMP.

No posee privilegios suficientes para realizar la acción en los registros

g. Desconectarse y conectar con el usuario JuanPerez y ejecutar el procedimiento


PLANILLA.ENROLAR_EMPLEADO.
h. Borrar los registros de la tabla PLANILLA_EMP y PLANILLA.
i. Crear un perfil para asignar tiempo de sesión de 30 minutos

Ya que se encuentra trabajando con “JuanPerez”, este no cuenta privilegios suficientes para realizar la
operación requerida.
j. Asignar el perfil a los usuarios JuanPerez y JosePerez.

El usuario “JuanPerez” no posee los privilegios suficientes para realizar esta operación y tampoco
existe un perfil denominado “PerfilTemporalPlanilla” puesto que en el inciso anterior, no se pudo
crear el perfil por falta de privilegios

También podría gustarte