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