В настоящее время я не могу заставить работать триггер в Oracle SQL. Я пытаюсь сравнить значения в разных таблицах. Точнее говоря, я хочу посмотреть, будет ли дата больше / позже другой даты, в зависимости от результата может произойти ошибка, т.е. дата ввода бюджета проекта не может быть раньше даты начала проекта.
У меня есть две соответствующие таблицы.
Проект: https://i.imgur.com/MC7yPZT.png
Бюджет: https://i.imgur.com/HGJ6oLy.png
Это мой триггер:
-- check legality of budget date
CREATE OR REPLACE TRIGGER trg_budget_date
BEFORE UPDATE OF budget_date ON budget
FOR EACH ROW
DECLARE var_project_start DATE;
BEGIN
SELECT project.project_start
INTO var_project_start
FROM project
WHERE project.project_id = :new.project_id;
IF :new.budget_date > var_project_start THEN
RAISE_APPLICATION_ERROR(-20000, 'Budget made before project start.');
END IF;
END;
/
Чтобы продемонстрировать, как мой триггер не работает, я сначала объясню, как я его тестирую.
SELECT project_id, project_start
FROM project
WHERE project_id = '8';
Результат 15 сентября. Теперь давайте попробуем вставить бюджет до даты начала, скажем, 13-СЕНТЯБРЯ-18.
INSERT INTO budget VALUES (8, 9000, '13-SEP-18', 4);
После выполнения этих двух команд, это результат:
https://i.imgur.com/cWjrIMv.png
Как видите, он вообще не работает. Бюджет проекта (8) добавляется так, как если бы триггер не работал вообще.
Если кто-то может увидеть проблему, направьте меня в правильном направлении, я был бы очень признателен. Большое спасибо за прочтение и ваше время.