Я прочитал документы Oracle о создании триггеров и делаю то, что он показывает, но это просто не работает. Моя цель - обновить таблицу TPM_PROJECT с минимальным STARTDATE, появляющимся в таблице TPM_TRAININGPLAN. Таким образом, каждый раз, когда кто-то обновляет столбец STARTDATE в TPM_TRAININGPLAN, я хочу обновить таблицу TPM_PROJECT. Вот что я пытаюсь:
CREATE TRIGGER Trigger_UpdateTrainingDelivery
AFTER DELETE OR INSERT OR UPDATE OF STARTDATE
ON TPM_TRAININGPLAN
FOR EACH ROW WHEN (new.TRAININGPLANTYPE='prescribed')
BEGIN
UPDATE TPM_PROJECT SET TRAININGDELIVERYSTART = (SELECT MIN(TP.STARTDATE) FROM TPM_TRAININGPLAN TP WHERE TP.PROJECTID = new.PROJECTID AND TP.TRAININGPLANTYPE='prescribed')
WHERE PROJECTID = new.PROJECTID
END;
Триггер создается без ошибок, но я получаю предупреждение:
Warnings: --->
W (1): Warning: execution completed with warning
<---
Конечно, Oracle недостаточно хорош, чтобы на самом деле сказать мне, что такое предупреждение, мне просто показывают, что есть один.
Затем, если я обновляю таблицу плана тренировки с помощью:
UPDATE TPM_TRAININGPLAN
set STARTDATE = to_date('03/12/2009','mm/dd/yyyy')
where TRAININGPLANID=15916;
Я получаю сообщение об ошибке:
>[Error] Script lines: 20-22 ------------------------
ORA-04098: trigger 'TPMDBO.TRIGGER_UPDATETRAININGDELIVERY' is invalid and failed re-validation
Script line 20, statement line 1, column 7
Любые идеи, что я делаю неправильно? Спасибо!