Во-первых, ваш триггер должен быть в таблице TICKET, а не в таблице FLIGHT.Во-вторых, вы не должны создавать резервную копию билета, если рейс уже вылетел.Ваш код всегда создает резервную копию.Я полагаю, что следующее может работать лучше:
CREATE OR REPLACE TRIGGER backUpTicketCancelled
BEFORE DELETE ON TICKET
FOR EACH ROW
DECLARE
rowFlight FLIGHT%ROWTYPE;
BEGIN
SELECT *
INTO rowFlight
FROM FLIGHT f
WHERE f.FLIGHTID = :OLD.FLIGHTID;
IF rowFlight.actDepartDateTime IS NULL THEN
INSERT INTO backUpTicket
(CANCELLEDKEY, FLIGHTID, TICKETNUM, SEATNUM)
VALUES
(generateKey.nextVal, :old.flightID, :old.TicketNum, :old.seatNum);
ELSE
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE', 'DD-MON-YYYY HH24:MI:SS') || ': ' ||
'Flight ' || :OLD.FLIGHTID || ' departed at ' ||
TO_CHAR(rowFlight.actDepartDateTime, 'DD-MON-YYYY HH24:MI:SS' ||
' so ticket #' || :OLD.TICKETNUM || ' for seat #' || :OLD.SEATNUM ||
' is not eligible for backup');
END IF;
END backUpTicket;
Кроме того, имя таблицы резервной копии должно быть BACKUP_TICKET
, а не backUpTicket
, так что вы, вероятно, будете помечены для этого.
Кроме того, хотя я понимаю, что это домашнее задание, это очень плохой выбор дизайна.Вам следует создать процедуру, которая выполняет все действия, необходимые для удаления заявки, вместо того, чтобы "магический код" скрывать в триггере, который выполняет такого рода деловые решения.
Удачи.