- Sebuah
IF
pernyataan membutuhkanTHEN
- Dalam PL/SQL, Anda menggunakan
=
untuk menguji kesetaraan, bukan==
- Anda perlu mendeklarasikan variabel yang Anda pilih
Ketika saya melakukan tiga hal itu, saya mendapatkan sesuatu seperti ini
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;
Di luar kesalahan sintaks tersebut, saya akan terkejut jika SELECT INTO
pernyataan itu benar. Sebuah SELECT INTO
harus mengembalikan tepat 1 baris. Kueri Anda hampir pasti akan mengembalikan beberapa baris karena tidak ada predikat yang akan membatasi kueri untuk penerbangan tertentu atau pemesanan tertentu. Agaknya, Anda ingin bergabung ke satu atau beberapa kolom di PASSENGER_BOOKING
tabel.
Selain itu, jika ini adalah sesuatu selain tugas pekerjaan rumah, pastikan Anda memahami bahwa pemicu semacam ini tidak berfungsi dengan benar di lingkungan multi-pengguna.