GTB - Tarea 6 - SOL
GTB - Tarea 6 - SOL
GTB - Tarea 6 - SOL
PUNTUACIÓN
Tarea 6
1.- Crear un procedimiento que muestre los vehículos (marca, modelo y color) que no estén
reparados y los datos de los clientes y vehículos que han entrado a reparar hoy. (En nuestro
caso ninguno).
CREATE PROCEDURE `vehiculos_reparacion_hoy`()
BEGIN
SELECT marca, modelo, color, curdate()
FROM VEHICULOS v JOIN REPARACIONES r ON(v.matricula=r.matricula)
WHERE reparado = 0;
END
2.- Crear una función que actualice el estado de las reparaciones que estén finalizadas en una
fecha que se indique y que devuelva cuantas reparaciones han finalizado en esa fecha.
CREATE FUNCTION `actualizar_reparaciones`(fecha date) RETURNS int(11)
BEGIN
DECLARE ultima_fila INT DEFAULT 0;
DECLARE num INT(5);
DECLARE id INT(11);
DECLARE repa tinyint(1);
DECLARE fech_sal DATE;
DECLARE cRep CURSOR FOR
SELECT IdReparacion, FechaSalida, Reparado
FROM REPARACIONES
WHERE FechaSalida IS NOT NULL AND Reparado=0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ultima_fila=1;
OPEN cRep;
SET num = 0;
rep: LOOP
FETCH cRep INTO id,fech_sal, repa;
IF (ultima_fila=1) THEN
LEAVE rep;
END IF;
RETURN num;
END
-comprobación
select actualizar_reparaciones('2011-01-08');
3.-Un procedimiento que muestre un listado con dos columnas: en la primera, en mayúsculas
apellidos y nombre de todos los clientes (entre los apellidos y el nombre incluir una coma como
separador) y en la segunda, la ciudad en la que cada cliente tiene su domicilio (únicamente la
ciudad, no la dirección).
NOTA: utilicen la siguiente expresión para extraer la ciudad
a) Diseña una función que calcule el importe de los recambios sustituidos en una reparación.
CREATE FUNCTION `ImporteRecambios`(IdRep INT) RETURNS float
BEGIN
DECLARE Resultado FLOAT Default 0;
SELECT SUM(Unidades*PrecioReferencia) INTO Resultado
FROM Incluyen INNER JOIN RECAMBIOS REC ON REC.IdRecambio = Incluyen.IdRecambio
WHERE Incluyen.IdReparacion = IdRep;
RETURN Resultado;
END
b) Crear una función que devuelva el importe de las actuaciones que se llevan a cabo en una
reparación (para calcular el importe dividimos el importe de la actuación entre el tiempo
estimado para calcular el precio de la hora. Luego multiplicamos por las horas reales).
c) Hacer una consulta que calcule el importe total (mano de obra y recambios) de las
reparaciones que se le hayan realizado al vehículo de matrícula '1313 DEF'.
5.- Crear un procedimiento que realice un listado con los nombres y fechas, de todos los empleados
y departamentos por los que ha pasado ordenado por fecha. Realizar la comprobación.
CREATE PROCEDURE `historial_empleados`()
begin
SELECT nombre, apellido1, apellido2, fecha_inicio, nombre_dpto
FROM EMPLEADOS E JOIN HISTORIAL_LABORAL H ON (E.dni= H.empleado_dni)
JOIN DEPARTAMENTOS D ON(H.dpto_cod = D.dpto_cod)
ORDER BY fecha_inicio;
end;
-comprobación
call list_empleados_departementos();
6.- Crear un procedimiento que actualice los estudios de un empleado (pasando como parámetros el
dni del empleado, nombre de la universidad, año, grado y especialidad). En caso de error enviar un
mensaje SIGNAL.
CREATE PROCEDURE `actualizar_estudios`(
in dni int
, in uni int
, in año int
, in grado varchar(5)
, in espe varchar(20)
)
begin
end if;
end;
USE HistorialEmpleados;
DROP TRIGGER IF EXISTS update_empleados;
DELIMITER $$
create trigger update_empleados
after update on EMPLEADOS for each row
begin
if new.salario = old.salario then
insert into CambiosEmpleados
values (old.dni,old.direcc1,old.ciudad, curdate());
end if;
end $$
DELIMITER ;
c) Realiza la comprobación.
-- comprobación
Nota: Debe existir el departamento de VENTAS
call cambio_departamento(12345,1,'2018/01/01', 'VENTAS', 22222);
b) Crear un trigger para que cuando un empleado cambie de puesto actualice
automáticamente su historial laboral (fecha de finalización en su anterior departamento).
Realizar la comprobación con el procedimiento anterior.
NOTA: Este apartado no es posible realizarlo en MySQL. Lo realizaremos en el apartado a).