sql >> Databasteknik >  >> RDS >> Oracle

Oracle utlöser uppdatering vid ett annat bord

  1. En IF satsen behöver en THEN
  2. I PL/SQL använder du en = för att testa för likhet, inte ==
  3. Du måste deklarera de variabler som du väljer i

När jag gör de tre sakerna får jag något sånt här

create or replace trigger PASSENGER_BOOKING_T1
  AFTER insert on PASSENGER_BOOKING
  for each row
declare
  l_seat       flight.seat%type;
  l_flight_id  flight.flight_id%type;
begin
  IF (:NEW.CLASS_TYPE = 'ECO')
  THEN
    SELECT F.AVL_SEATS_ECOCLASS,F.FLIGHT_ID 
      INTO l_seat, l_flight_id
      FROM BOOKING B, 
           JOURNEY_FLIGHT J, 
           FLIGHT F 
     WHERE B.JOURNEY_ID = J.JOURNEY_ID 
       and F.FLIGHT_ID = J.FLIGHT_ID;

    UPDATE FLIGHT 
       SET AVL_SEATS_ECOCLASS = (l_seat-1)
     WHERE FLIGHT_ID = l_flight_id;   
  END IF;
end;​

Utöver dessa syntaxfel skulle jag bli chockad om SELECT INTO uttalandet var korrekt. En SELECT INTO måste returnera exakt 1 rad. Din fråga bör nästan säkert returnera flera rader eftersom det inte finns några predikat som skulle begränsa frågan till en viss flygning eller en viss bokning. Förmodligen vill du gå med i en eller flera kolumner i PASSENGER_BOOKING bord.

Dessutom, om detta är något annat än en hemuppgift, se till att du förstår att den här typen av trigger inte fungerar korrekt i en miljö med flera användare.



  1. Hur skapar jag en fråga med två gånger en anslutning till en tabell i Laravel 5.3?

  2. Infoga värden i en anpassad tabell när beställningen görs i Woocommerce

  3. COUNT(id) kontra COUNT(*) i MySQL

  4. SQL Välj om du vill att ett värde endast ska visas en gång