-
IF
câu lệnh cần cóTHEN
- Trong PL / SQL, bạn sử dụng
=
để kiểm tra sự bình đẳng, không phải==
- Bạn cần khai báo các biến mà bạn đang chọn
Khi tôi làm ba điều đó, tôi nhận được một thứ như thế này
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;
Ngoài những lỗi cú pháp đó, tôi sẽ bị sốc nếu SELECT INTO
tuyên bố đã đúng. A SELECT INTO
phải trả về đúng 1 hàng. Truy vấn của bạn gần như chắc chắn sẽ trả về nhiều hàng vì không có vị từ nào hạn chế truy vấn đối với một chuyến bay cụ thể hoặc một đặt chỗ cụ thể. Có lẽ, bạn muốn tham gia vào một hoặc nhiều cột trong PASSENGER_BOOKING
bảng.
Ngoài ra, nếu đây không phải là bài tập về nhà, hãy đảm bảo rằng bạn hiểu rằng loại trình kích hoạt này không hoạt động chính xác trong môi trường nhiều người dùng.