- Ein
IF
Anweisung benötigt einTHEN
- In PL/SQL verwenden Sie ein
=
um auf Gleichheit zu testen, nicht==
- Sie müssen die Variablen deklarieren, die Sie auswählen
Wenn ich diese drei Dinge mache, bekomme ich so etwas:
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;
Abgesehen von diesen Syntaxfehlern wäre ich schockiert, wenn die SELECT INTO
aussage war richtig. A SELECT INTO
muss genau 1 Zeile zurückgeben. Ihre Abfrage sollte mit ziemlicher Sicherheit mehrere Zeilen zurückgeben, da es keine Prädikate gibt, die die Abfrage auf einen bestimmten Flug oder eine bestimmte Buchung beschränken würden. Vermutlich möchten Sie einer oder mehreren Spalten im PASSENGER_BOOKING
beitreten Tabelle.
Wenn es sich um etwas anderes als eine Hausaufgabe handelt, stellen Sie außerdem sicher, dass Sie verstehen, dass diese Art von Auslöser in einer Umgebung mit mehreren Benutzern nicht richtig funktioniert.