- Um
IF
declaração precisa de umTHEN
- Em PL/SQL, você usa um
=
para testar a igualdade, não==
- Você precisa declarar as variáveis nas quais está selecionando
Quando faço essas três coisas, recebo algo assim
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ém desses erros de sintaxe, eu ficaria chocado se o
SELECT INTO
afirmação estava correta. Um SELECT INTO
deve retornar exatamente 1 linha. Sua consulta quase certamente deve retornar várias linhas, pois não há predicados que restringiriam a consulta a um voo específico ou uma reserva específica. Presumivelmente, você deseja ingressar em uma ou mais colunas no PASSENGER_BOOKING
tabela. Além disso, se isso não for uma tarefa de casa, certifique-se de entender que esse tipo de gatilho não funciona corretamente em um ambiente multiusuário.