- Een
IF
statement heeft eenTHEN
. nodig - In PL/SQL gebruik je een
=
om te testen op gelijkheid, niet==
- U moet de variabelen die u selecteert declareren in
Als ik die drie dingen doe, krijg ik zoiets als dit
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;
Afgezien van die syntaxisfouten, zou ik geschokt zijn als de SELECT INTO
stelling klopte. EEN SELECT INTO
moet precies 1 rij retourneren. Uw zoekopdracht zou vrijwel zeker meerdere rijen moeten retourneren, aangezien er geen predikaten zijn die de zoekopdracht zouden beperken tot een bepaalde vlucht of een bepaalde boeking. Vermoedelijk wilt u zich aansluiten bij een of meer kolommen in de PASSENGER_BOOKING
tafel.
Bovendien, als dit iets anders is dan een huiswerkopdracht, zorg er dan voor dat je begrijpt dat dit soort trigger niet correct werkt in een omgeving met meerdere gebruikers.