- Un
IF
declaración necesita unTHEN
- En PL/SQL, usa un
=
para probar la igualdad, no==
- Debe declarar las variables que está seleccionando
Cuando hago esas tres cosas, obtengo algo como esto
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;
Más allá de esos errores de sintaxis, me sorprendería que SELECT INTO
declaración era correcta. A SELECT INTO
debe devolver exactamente 1 fila. Es casi seguro que su consulta devuelva varias filas, ya que no hay predicados que restrinjan la consulta a un vuelo en particular o una reserva en particular. Presumiblemente, desea unirse a una o más columnas en PASSENGER_BOOKING
mesa.
Además, si se trata de algo más que una tarea, asegúrese de comprender que este tipo de disparador no funciona correctamente en un entorno multiusuario.