- En
IF
satsen behöver enTHEN
- I PL/SQL använder du en
=
för att testa för likhet, inte==
- 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.