Чтобы иметь возможность использовать WHEN (NEW.flno = 'CX7520')
после FOR EACH ROW
, UPDATE OF flno
необходимо для отдельного столбца flno
CREATE OR REPLACE TRIGGER flightsch_day
BEFORE INSERT OR UPDATE OF flno ON fl_schedule
FOR EACH ROW
WHEN (NEW.flno = 'CX7520')
DECLARE
BEGIN
IF TO_CHAR(:NEW.departs,'Dy','NLS_DATE_LANGUAGE=English') NOT IN ('Tue','Fri','Sun') THEN
RAISE_APPLICATION_ERROR(-20000,'Flight number CX7520 can be scheduled only on Tuesday, Friday and Sunday.');
END IF;
END;
/
или без этого WHEN..
предложение, возьмите :NEW.flno = 'CX7520'
в IF
Оператор:
CREATE OR REPLACE TRIGGER flightsch_day
BEFORE INSERT OR UPDATE ON fl_schedule
FOR EACH ROW
DECLARE
BEGIN
IF NOT ( TO_CHAR(:NEW.departs,'Dy','NLS_DATE_LANGUAGE=English') IN ('Tue','Fri','Sun')
AND :NEW.flno = 'CX7520' ) THEN
RAISE_APPLICATION_ERROR(-20000,'Flight number CX7520 can be scheduled only on Tuesday, Friday and Sunday.');
END IF;
END;
/
- используйте сокращения дня, содержащие опцию
NLS_DATE_LANGUAGE
. В противном случае вы можете столкнуться с неожиданными ситуациями. - отображаемая ошибка связана с использованием
weekday
в функции EXTRACT()
, где допускается использование day
, month
, year
для переменной типа даты, а также hour
, minute
, second
..et c. если допустима переменная типа datetime, но не weekday