- Un
IF
l'istruzione richiede unTHEN
- In PL/SQL, usi un
=
per verificare l'uguaglianza, non==
- Devi dichiarare le variabili in cui stai selezionando
Quando faccio queste tre cose, ottengo qualcosa del genere
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;
Al di là di questi errori di sintassi, sarei scioccato se il SELECT INTO
affermazione era corretta. Un SELECT INTO
deve restituire esattamente 1 riga. La tua query dovrebbe quasi sicuramente restituire più righe poiché non ci sono predicati che limiterebbero la query a un volo particolare o a una prenotazione particolare. Presumibilmente, vuoi unirti a una o più colonne nel PASSENGER_BOOKING
tabella.
Inoltre, se si tratta di qualcosa di diverso da un compito a casa, assicurati di comprendere che questo tipo di trigger non funziona correttamente in un ambiente multiutente.