Para descargar el SQL con las tablas empleadas, pulse aquí
Ejercicio 9. Realizar
un procedimiento que acepte un departamento
como argumento y devuelva (visualice) todos los datos de los empleados que en
él trabajan.
delimiter $$
drop procedure if exists nueve $$
create procedure
nueve(dep varchar(255))
-- Pre: dep es
cadena referenciando a nombre de departamento
-- Post: Muestra por
pantalla los empleados de dicho departamento
begin
     select *
     from
empleados
     where numde
= (
         select numde
         from departamentos
         where
nomde like dep
     );
end $$
delimiter ;
Ejercicio 10. Realizar
un procedimiento que acepte un centro
como argumento y devuelva (visualice)  todos los datos de los empleados que en él
trabajan.
delimiter $$
drop procedure if exists diez $$
create procedure
diez(centro varchar(255))
-- Pre: dep es
cadena referenciando a nombre de departamento
-- Post: Muestra por
pantalla los empleados de dicho departamento
begin
     select *
     from
empleados
     where numde
in (
         select
numde
         from
departamentos
         where
numce = (
              select numce
              from centros
              where nomce like centro
         )
     );
end $$
delimiter ;
Ejercicio 11. Realizar
un procedimiento que acepte un departamento
y devuelva mediante dos parámetros de tipo OUT su  número de director (director) y presupuesto.
delimiter $$
drop procedure if exists once $$
create procedure
once(departamento varchar(255), out director integer, out presupuesto integer)
-- Pre: departamento
es cadena de caracteres que referencia a nombre de depno. director y presupuesto
son enteros de salida
-- Post: Devuelve id
de director y presupuesto de departamento
begin
     select direc, presu
     into director, presupuesto
     from departamentos
     where nomde like departamento;
end $$
delimiter ;
Ejercicio 12. Realizar
un procedimiento que acepte dos cadenas: El nombre de una tabla y el de una columna
y elimine la columna de la tabla.  No es
necesario que el procedimiento controle antes si existe la tabla o columna.
delimiter $$
drop procedure if exists doce $$
create procedure
doce(in tabla varchar(255), in columna varchar(255))
-- Pre: tabla y
columna son cadenas de caracteres de máx 255
-- Post: Borra la
columna de esa tabla
begin
     declare sentencia varchar(255);
     set @consulta = concat('alter table
',tabla,' drop column ',columna,';');
     prepare consulta from @consulta;
     execute consulta;
     deallocate
prepare consulta;
end $$
delimiter ;
Ejercicio 13. Desarrollar
un procedimiento que visualice el apellido y la fecha de alta de todos los
empleados ordenados por apellido.
delimiter $$
drop procedure if exists trece $$
create procedure
trece()
-- Pre:
-- Post: Muestra
apellidos y fecha de alta de empleados ordenados por apellido
begin
     select nomem
as 'APELLIDO', fecin as 'FECHA ALTA'
     from
empleados
     order by 1;
end $$
delimiter ;
Ejercicio 14. Codificar
un procedimiento que muestre el nombre de cada departamento y el número de
empleados que tiene.
delimiter $$
drop procedure if exists catorce $$
create procedure
catorce()
-- Pre:
-- Post: Muestra por
pantalla nombre de departamento y cantidad de empleados que tiene
begin
     select nomde as 'DEPARTAMENTO',
count(e.numde) as 'NUMERO DE EMPLEADOS'
     from empleados e, departamentos d
     where e.numde = d.numde
     group by
nomde;
end $$
delimiter ;
Ejercicio 15. Escribir
un procedimiento que reciba una cadena y visualice el apellido y el número de
empleado de todos los empleados cuyo apellido contenga la cadena especificada.
Al finalizar visualizar el número de empleados mostrados.
delimiter $$
drop procedure if exists quince $$
create procedure quince(in nombre varchar(255))
begin
     select
numem, nomem 
     from
empleados 
     where nomem
like concat('%',nombre,'%');
     select
count(*)
     from
empleados
     where nomem
like concat('%',nombre,'%');
end $$
delimiter ;
Ejercicio 16. Escribir
un programa que visualice el apellido y el salario de los cinco empleados que
tienen el salario más alto.
delimiter $$
drop procedure if exists dieciseis $$
create procedure
dieciseis()
-- Pre
-- Post: Muestra por
pantalla nombre y salario de los 5 empleados con mayor salario
begin
     select nomem
AS 'nombre', salario
     from
empleados
     order by
salario desc
     limit 5;
end $$
delimiter ;
Ejercicio 17. Desarrollar
un procedimiento que permita insertar nuevos centros según las siguientes
especificaciones:
-           Se pasará
al procedimiento el nombre del departamento y la localidad.
-            El
procedimiento insertará la fila nueva asignando como número de departamento la
decena siguiente al número mayor de la 
tabla. 
delimiter $$
drop procedure if exists diecisiete $$
create procedure
diecisiete(in nomCen varchar(255), in localCen varchar(255))
-- Pre: nomDep y
localDep son cadenas de caracteres de máx 255
-- Post: Inserta nuevo departamento
begin
     declare
numDep integer;
     select
(numce+10)-(numce%10) 
     into numDep
     from centros
     order by
numce desc
     limit 1;
     insert into
centros(numce, nomce, seas)
     values(numDep, nomCen, localCen);
end $$
delimiter ;
Ejercicio 18. Escribir
un procedimiento que reciba todos los datos de un nuevo empleado y procese la
transacción de alta gestionando posibles errores.
drop procedure if exists dieciocho;
delimiter $$
create procedure dieciocho(numem int(11), numde
int(11), extel int(11), fecna date, fecin date, salario int(11), comision
int(11), numhi int(11), nomem varchar(18))
begin
     declare
valido int(1) default 1;
     declare controlErrores varchar(255);
     if numem is null then -- Si numero empleado
nulo
         set valido = 0;
         set controlErrores = 'Número de
empleado no puede ser nulo. ';
     end if;
     if numem in
(select numem from empleados) then -- Si numero empleado repetido
         set valido = 0;
         set controlErrores = 'Número de
empleado repetido';
     end if;
     if numde not in (select numde from
departamentos) then -- Si numero de departamento no está en la tabla
departamentos
         set valido = 0;
         set controlErrores =
concat(controlErrores,'Número de director no está en tabla departamentos. ');
     end if;
     if datediff(now(),fecna) < 5840 then --
Si fecha de nacimiento < 16 años (edad laborar mínima en España)
         set valido = 0;
         set controlErrores =
concat(controlErrores,'Empleados menores de 16 años es ilegal. ');
     end if;
     if datediff(fecin,fecna) <= 0 then -- Si
fecha de alta laboral menor que fecha nacimiento
         set valido = 0;
         set controlErrores =
concat(controlErrores,'La fecha de alta no puede ser menor que la de
nacimiento');
     end if;
     if valido =
0 then -- Comprobación. Si
valido = 0 muestro errores, si = 1 realizo inserción
         select
controlErrores;
     else
         insert
into empleados
          values
(numem, numde, extel, fecna, fecin, salario, comision, numhi, nomem);
     end if;  
end $$
delimiter ;
0 comments:
Publicar un comentario