Advertisement
AntonStanoev

trigger & cursor

Apr 17th, 2024 (edited)
843
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.70 KB | None | 0 0
  1. ALTER TABLE Flights
  2. ADD LastUpdated DATETIME;
  3.  
  4. CREATE TRIGGER UpdateFlightLastUpdated
  5. AFTER UPDATE ON Flights
  6. FOR EACH ROW
  7. BEGIN
  8.     UPDATE Flights
  9.     SET LastUpdated = CURRENT_TIMESTAMP
  10.     WHERE FlightID = OLD.FlightID;
  11. END;
  12.  
  13.  
  14. DELIMITER //
  15.  
  16. CREATE PROCEDURE UpdateDelayedFlights()
  17. BEGIN
  18.     -- Дефиниране на променливи за употреба в курсора
  19.     DECLARE flight_id INT;
  20.     DECLARE flight_duration INT;
  21.     DECLARE done INT DEFAULT FALSE;
  22.  
  23.     -- Деклариране на курсора
  24.     DECLARE flight_cursor CURSOR FOR
  25.         SELECT FlightID, Duration FROM Flights WHERE DepartureDateTime < CURRENT_DATE();
  26.  
  27.     -- Деклариране на обработчик на изключения за затваряне на курсора
  28.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  29.  
  30.     -- Отваряне на курсора
  31.     OPEN flight_cursor;
  32.  
  33.     -- Цикъл за обхождане на резултатите от курсора
  34.     flight_loop: LOOP
  35.         FETCH flight_cursor INTO flight_id, flight_duration;
  36.  
  37.         -- Проверка дали всички записи са прегледани
  38.         IF done THEN
  39.             LEAVE flight_loop;
  40.         END IF;
  41.  
  42.         -- Логика за обновяване на статуса на полетите
  43.         IF flight_duration > 360 THEN  -- Например, ако полетът е планиран да продължи повече от 6 часа
  44.             UPDATE Flights SET Status = 'Delayed' WHERE FlightID = flight_id;
  45.         END IF;
  46.  
  47.     END LOOP;
  48.  
  49.     -- Затваряне на курсора
  50.     CLOSE flight_cursor;
  51. END;
  52.  
  53. DELIMITER ;
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement