IF
изразът се нуждае отTHEN
- В PL/SQL използвате
=
за тестване за равенство, а не==
- Трябва да декларирате променливите, в които избирате
Когато направя тези три неща, получавам нещо подобно
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;
Освен тези синтактични грешки, бих бил шокиран, ако SELECT INTO
твърдението беше правилно. A SELECT INTO
трябва да върне точно 1 ред. Вашата заявка почти сигурно трябва да върне множество редове, тъй като няма предикати, които биха ограничили заявката до определен полет или конкретна резервация. Предполага се, че искате да се присъедините към една или повече колони в PASSENGER_BOOKING
таблица.
Освен това, ако това е нещо различно от домашна работа, уверете се, че разбирате, че този вид задействане не работи правилно в среда с много потребители.