我开发了一个触发器来检查日期的有效性。它工作正常,因为它可以防止我存储无效日期,但我也收到一条奇怪的错误消息,我不知道为什么。我的代码如下:
CREATE OR REPLACE TRIGGER "CHECKDATEVALIDITY"
BEFORE INSERT OR UPDATE
ON Event
FOR EACH ROW
BEGIN
IF :NEW.day < 1 OR :NEW.month < 1 OR :NEW.month > 12
THEN
RAISE_APPLICATION_ERROR(-20101, 'Wrong date');
END IF;
IF :NEW.month = 4 OR :NEW.month = 6 OR :NEW.month = 9 OR :NEW.month = 11
THEN
IF :NEW.day > 30
THEN
RAISE_APPLICATION_ERROR(-20101, 'Wrong date');
END IF;
ELSIF :NEW.month = 2
THEN
IF (mod(:NEW.year, 4) = 0)
THEN
IF :NEW.day > 29
THEN
RAISE_APPLICATION_ERROR(-20101, 'Wrong date');
END IF;
ELSIF :NEW.day > 28
THEN
RAISE_APPLICATION_ERROR(-20101, 'Wrong date');
END IF;
ELSE
IF :NEW.day > 31
THEN
RAISE_APPLICATION_ERROR(-20101, 'Wrong date');
END IF;
END IF;
END checkDateValidity;
我得到的错误是:
错误 ORA-20101:错误日期 ORA-06512:在“USER587.CHECKDATEVALIDITY”第 28 行 ORA-04088:执行触发器“USER578.CHECKDATEVALIDITY”时出错。
另外我注意到我从调用的 RAISE_APPLICATION_ERROR 旁边的行中得到错误。什么发出错误?