私は、日付の正当性をチェックするトリガを開発しました。無効な日付を格納できないのでうまく動作しますが、私も奇妙なエラーメッセージが表示され、理由を把握できません。私のコードは次のとおりです:RAISE_APPLICATION_ERROR問題
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の横にある行からエラーが発生していることに気付きました。エラーを発行するのは何ですか?
エラーメッセージについて「奇妙な」と思われるのは何ですか?それは私にとって全く適切だと思われます。 –
こんにちは@ p.cambellご意見ありがとうございます。私が奇妙なのは、トリガが動作するように動作することです。シンタックスに何も問題がないと思っています。私はそれを完全にチェックしました。私はこの点をどこから見るべきか分からない。 – haunted85
日付検証のような一般的な機能のために私たち自身のロジックを発明する際の問題は、ルールが間違っていることです。 100で割り切れる年は、400で割り切れる場合を除いて、うるう年ではありません。すなわち、29-FEB-1900は共通年、29-FEB-2000はうるう年です。あなたの論理に29-FEB-1900が許されています。 – APC