- Un
IF
l'instruction a besoin d'unTHEN
- En PL/SQL, vous utilisez un
=
pour tester l'égalité, pas==
- Vous devez déclarer les variables dans lesquelles vous sélectionnez
Quand je fais ces trois choses, j'obtiens quelque chose comme ça
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;
Au-delà de ces erreurs de syntaxe, je serais choqué si le SELECT INTO
déclaration était correcte. Un SELECT INTO
doit retourner exactement 1 ligne. Votre requête devrait presque certainement renvoyer plusieurs lignes car il n'y a pas de prédicat qui restreindrait la requête à un vol particulier ou à une réservation particulière. Vraisemblablement, vous souhaitez rejoindre une ou plusieurs colonnes dans le PASSENGER_BOOKING
tableau.
De plus, s'il s'agit d'autre chose qu'un devoir, assurez-vous de bien comprendre que ce type de déclencheur ne fonctionne pas correctement dans un environnement multi-utilisateurs.