-
IF
ステートメントにはTHEN
が必要です - PL / SQLでは、
=
を使用します==
ではなく、同等性をテストする - 選択する変数を宣言する必要があります
これらの3つのことを行うと、次のようになります
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
があれば、私はショックを受けます。 ステートメントは正しかった。 SELECT INTO
正確に1行を返す必要があります。クエリを特定のフライトまたは特定の予約に制限する述語がないため、クエリはほぼ確実に複数の行を返すはずです。おそらく、PASSENGER_BOOKING
の1つ以上の列に結合したいとします。 テーブル。
さらに、これが宿題以外の場合は、この種のトリガーがマルチユーザー環境では正しく機能しないことを理解してください。