Actividad Virtual Base de Datos Avanzados 2 Cibertec
Actividad Virtual Base de Datos Avanzados 2 Cibertec
Actividad Virtual Base de Datos Avanzados 2 Cibertec
Actividad Virtual 07
Objetivo
Crear Procedimientos Almacenados y Funciones.
declare
emaile varchar2(10);
idempleado varchar2(3);
begin
select email into emaile from employees where employee_id = idempleado;
emaile:=FN_ULTI_CARA_EMAI_EMPL(emaile);
dbms_output.put_line(emaile);
exception
when no_data_found then
dbms_output.put_line('Código de empleado no existe');
end;
2) Elaborar una función FN_SUTO_SALA_EMPL_OFIC que al ingresar el oficio de empleado de la
tabla EMPLOYEES me retorne la sumatorio total del salario de los empleados de dicho oficio.
En caso no exista ningún empleado con dicho oficio generar una Excepción que lance el mensaje
“No existe empleados con dicho oficio”.
declare
salario number;
begin
select sum(salary) into salario from employees where job_id = 'ST_MAN';
salario:=FN_SUTO_SALA_EMPL_OFIC(salario);
dbms_output.put_line(salario);
exception
when no_data_found then
dbms_output.put_line('Código de empleado no existe');
end;
3) Elaborar un Procedimiento Almacenado SP_REGI_OFIC que realice una inserción de registros a
la tabla JOBS. Usando excepciones predefinidas muestre el mensaje “Ya existe un oficio con el
código ingresado” a través del gestor DUP_VAL_ON_INDEX y muestre el número y mensaje de
error de las funciones SQLCODE y SQLERRM a través del gestor OTHERS.
begin
SP_REGI_OFIC('RZ_RAZ', 'TITULO', 5000,50000);
end;
4) Elaborar un Procedimiento Almacenado SP_LIST_EMPL_OFIC_DEPA que reciba el oficio y el
departamento y luego muestre el código, el nombre y el apellido concatenado, el correo, la
fecha de contratación y el salario de todos los empleados (tabla EMPLOYEES). En caso no exista
el oficio o el departamento, usando excepciones definidas por el usuario envíe los siguientes
mensajes “No existe el oficio y el departamento”, “El oficio no existe” y “El departamento no
existe”.
create or replace procedure SP_LIST_EMPL_OFIC_DEPA
(id_job in varchar2, id_dept in number, cur_return out sys_refcursor)
as
msj_error varchar2(200);
num_error number;
sms1 exception;
sms2 exception;
sms3 exception;
exist_job number;
exist_dpt number;
begin
select count(*) into exist_dpt from Employees
where department_id = id_dept;
select count(*) into exist_job from Employees
where job_id = id_job ;
if exist_dpt = 0 and exist_job = 0 then
raise sms3;
elsif exist_dpt=0 then
raise sms2;
elsif exist_job=0 then
raise sms1;
else
open cur_return for
select
employee_id, first_name||' '||last_name as Nombre_Completo, email,
hire_date, salary
from Employees
Where department_id = id_dept and JOB_ID=id_job;
end if;
exception
when sms1 then
RAISE_APPLICATION_ERROR(-20001,'el oficio no existe');
when sms2 then
RAISE_APPLICATION_ERROR(-20001,'El departamento no existe');
when sms3 then
RAISE_APPLICATION_ERROR(-20001,'No existe el oficio y el departamento');
when others then
num_error := SQLCODE;
msj_error := SQLERRM;
raise_application_error(-20001,
'Error en el ingreso de datos '
||'Codigo de Error = ' ||SQLCODE ||' Error: ' || SQLERRM);
end;