9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
/* Escribir un procedimiento que reciba todos los datos de un nuevo empleado
y procese la transacción de alta gestionando posibles errores. */
delimiter $$
drop procedure if exists ejercicio18 $$
create procedure ejercicio18 ( in e_emp_no int, in e_apellido varchar(8), in e_oficio varchar(10),
in e_director int, in e_fecha_alta date, in e_salario float(6,2),
in e_comision float(6,2), in e_dep_no int, out s_error varchar(100))
begin
declare n_emp int;
declare n_director int;
declare n_dep int;
/* si el numero de empleados correspondientes es distinto de 0, significa que ese empleado esta repetido */
select count(emp_no)
into n_emp
from empleados
where emp_no=e_emp_no;
/* si el numero de empleados correspondientes es 0, significa que ese director no existe */
select count(director)
into n_director
from empleados
where director=e_director;
/* si el numero de empleados correspondientes es 0, significa que ese departamento no existe */
select count(dep_no)
into n_dep
from empleados
where dep_no=e_dep_no;
if e_emp_no is null then
set s_error='emp_no no puede ser null';
elseif n_emp<>0 then
set s_error='emp_no no puede estar repetido';
elseif n_director=0 then
set s_error='no encontramos este director';
elseif e_fecha_alta>now() then
set s_error='la fecha no es correcta';
elseif n_dep=0 then
set s_error='no encontramos este departamento';
else
insert into empleados
values (e_emp_no, e_apellido, e_oficio, e_director, e_fecha_alta, e_salario, e_comision, e_dep_no);
set s_error='empleado insertado con exito';
end if;
end $$
delimiter ;
0 comentarios:
Publicar un comentario