IF
instrukcja wymagaTHEN
- W PL/SQL używasz
=
testować pod kątem równości, a nie==
- Musisz zadeklarować zmienne, które wybierasz
Kiedy robię te trzy rzeczy, otrzymuję coś takiego
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;
Poza tymi błędami składni byłbym zszokowany, gdyby SELECT INTO
stwierdzenie było poprawne. SELECT INTO
musi zwrócić dokładnie 1 wiersz. Twoje zapytanie powinno prawie na pewno zwrócić wiele wierszy, ponieważ nie ma predykatów, które ograniczałyby zapytanie do konkretnego lotu lub konkretnej rezerwacji. Przypuszczalnie chcesz dołączyć do jednej lub więcej kolumn w PASSENGER_BOOKING
tabeli.
Dodatkowo, jeśli jest to coś innego niż zadanie domowe, upewnij się, że rozumiesz, że ten rodzaj wyzwalacza nie działa poprawnie w środowisku wielu użytkowników.