Bases de Datos - Ayuda para crear trigger y procedimientos almacenados

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido 1 puesto en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Ayuda para crear trigger y procedimientos almacenados

Publicado por Daniel (2 intervenciones) el 11/01/2020 12:23:48
Hola compañeros, quería saber si alguien podría ayudarme para crear un pequeño trigger y un par de procedimientos almacenados.(MYSQL)

Enunciado trigger: No haya más de 10 pasajeros en un vuelo y que la suma de los pesos de los pasajeros no sea mas de 900kg.

Enunciado proc.almacenado 1: Un procedimiento almacenado al que le pasamos como parámetro la matricula del avión y un intervalo de fechas y nos da la lista de vuelos realizados por ese avión entre esas fechas.

Enunciado proc.almacenado 2: Un procedimiento almacenado al que le pasamos una fecha como parámetro y nos
dice que hidroaviones no están completos, incluyendo el listado el nombre de su piloto.

Aquí adjunto foto

HIDRO

Muchas gracias, un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda para crear trigger y procedimientos almacenados

Publicado por anonymous (41 intervenciones) el 12/01/2020 03:56:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-- Trigger que controla Peso mayor de 900 KG
CREATE TRIGGER tr_peso BEFORE INSERT ON controlvuelosbd.pasaje
FOR EACH ROW
BEGIN
       DECLARE v_Peso int DEFAULT 0;
       SELECT SUM(Peso) into v_Peso FROM Pasaje WHERE idVuelo = NEW.idVuelo;
       IF (v_Peso > 900  ) THEN
           SET NEW.Peso = 0;      -- Llevamos 0 a ese peso de equipaje
       END IF;
  END;
 
-- Trigger que controla cantidad de pasajeros mayor de 10
CREATE TRIGGER tr_cantidad BEFORE INSERT ON Pasaje
  FOR EACH ROW
  BEGIN
       DECLARE v_Cantidad int DEFAULT 0;
       SELECT Count(*) into v_Cantidad FROM Pasaje WHERE idVuelo = NEW.idVuelo;
       IF (v_Cantidad > 10  ) THEN
           DELETE FROM tr_cantidad WHERE idPasajero = NEW.idPasajero; -- Borramos el Pasajero
       END IF;
  END
 
-- Procedimiento 1 que visualiza los vuelos realizados por ese HidroAvion
CREATE PROCEDURE spr_Vuelos(
IN p_MatriculaHidro varchar(15),
IN p_Fecha1 DATE,
IN p_Fecha2 DATE)
 
BEGIN
      SELECT VL.idVuelo, VL.Fecha, PL.Nombre AS Piloto
      FROM vuelo VL
      inner join piloto PL ON PL.idPiloto = VL.idPiloto
      WHERE MatriculaHidro = 1
      AND FECHA BETWEEN p_Fecha1 AND p_Fecha2;
END;
 
-- Procedimiento 1 para listar los vuelos que no están completos
CREATE PROCEDURE spr_VueloDisponible (
IN p_Fecha DATE)
 
BEGIN
      DECLARE CURVACIO INT DEFAULT 0;
      DECLARE ElVuelo INT;
      DECLARE Cupos INT DEFAULT 0;
 
      DECLARE Cur_Vuelos CURSOR FOR
      SELECT idVuelo
      FROM   Vuelo
      WHERE  Fecha = p_Fecha;
 
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET CURVACIO = 1;
 
 
      OPEN Cur_Vuelos;
      bucle: LOOP
      FETCH Cur_Vuelos INTO ElVuelo;
      IF CURVACIO = 1 THEN
         LEAVE bucle;
      END IF;
 
      SELECT COUNT(*) INTO Cupos FROM Pasaje where idVuelo = ElVuelo;
      IF (Cupos < 10) THEN
          SELECT HV.MatriculaHidro, VL.idVuelo, PL.Nombre AS Piloto, PS.Nombre as Pasajero
          FROM vuelo VL
          inner join piloto PL ON PL.idPiloto = VL.idPiloto
          inner join hidroavion HV ON HV.MatriculaHidro = VL.MatriculaHidro
          inner join pasaje PJ ON PJ.idVuelo = VL.idVuelo
          inner join pasajero PS ON PS.idPasajero = PJ.idPasajero
          where VL.idVuelo = ElVuelo;
          Set Cupos = 0;
      END IF;
 
  END LOOP bucle;
 
  CLOSE Cur_Vuelos;
 
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda para crear trigger y procedimientos almacenados

Publicado por anonymous (41 intervenciones) el 12/01/2020 14:52:22
Corregir en Trigger que controla cantidad de pasajeros mayor de 10 el nombre de la tabla: vuelo

En la instrucción: DELETE FROM tr_cantidad WHERE idPasajero = NEW.idPasajero; -- Borramos el Pasajero

Cambiar tr_cantidad por Vuelo así:

DELETE FROM Vuelo WHERE idPasajero = NEW.idPasajero; -- Borramos el Pasajero

Y en el Procedimiento que visualiza los vuelos realizados por ese HidroAvion

Reemplazar el 1 que hay en el WHERE MatriculaHidro = 1 por el parámetro p_MatriculaHidro así:

WHERE MatriculaHidro = p_MatriculaHidro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 4
Ha disminuido 1 puesto en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Ayuda para crear trigger y procedimientos almacenados

Publicado por Daniel (2 intervenciones) el 12/01/2020 17:22:40
Muchas gracias amigo! Gracias por compartir tu sabiduría y enseñar a los demás. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar