日付の有効性をチェックするトリガーを開発しました。無効な日付を保存できないので問題なく動作しますが、奇妙なエラー メッセージが表示され、その理由がわかりません。私のコードは次のとおりです。
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 の次の行からエラーが発生することに気付きました。エラーの原因は何ですか?