IF
příkaz potřebujeTHEN
- V PL/SQL používáte
=
testovat rovnost, ne==
- Musíte deklarovat proměnné, do kterých vybíráte
Když udělám tyto tři věci, dostanu něco takového
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;
Kromě těchto syntaktických chyb bych byl šokován, kdyby SELECT INTO
prohlášení bylo správné. A SELECT INTO
musí vrátit přesně 1 řádek. Váš dotaz by měl téměř jistě vrátit více řádků, protože neexistují žádné predikáty, které by omezovaly dotaz na konkrétní let nebo konkrétní rezervaci. Pravděpodobně se chcete připojit k jednomu nebo více sloupcům v PASSENGER_BOOKING
tabulka.
Pokud se navíc jedná o něco jiného než domácí úkol, ujistěte se, že rozumíte tomu, že tento druh spouštěče nefunguje správně v prostředí s více uživateli.