首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RAISE_APPLICATION_ERROR问题

RAISE_APPLICATION_ERROR问题
EN

Stack Overflow用户
提问于 2011-06-20 17:55:02
回答 2查看 14.2K关注 0票数 0

我开发了一个检查日期有效性的触发器。它可以正常工作,因为它阻止了我存储无效的日期,但是我也收到了一条奇怪的错误消息,我不知道为什么。我的代码如下:

代码语言:javascript
复制
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;

我得到的错误是:

error ORA-20101:错误日期或-06512:在"USER587.CHECKDATEVALIDITY“第28行ORA-04088:执行触发器'USER578.CHECKDATEVALIDITY‘时出错。

此外,我还注意到,我从被调用的RAISE_APPLICATION_ERROR旁边的行获得了错误。是什么导致了错误?

EN

回答 2

Stack Overflow用户

发布于 2011-06-20 18:07:35

您认为"wierd错误消息“是什么?在我看来,这是一个非常合理的堆栈追踪。在堆栈底部,执行触发器时出错。下一行告诉您,错误发生在第28行。堆栈的顶部是您的自定义错误消息和数字。这一切对我来说都很正常(尽管你似乎切断了一些与ORA-06512错误相关的错误文本)

代码语言:javascript
复制
ORA-20101: Wrong date
ORA-06512: on "USER587.CHECKDATEVALIDITY", line 28
ORA-04088: error while executing trigger 'USER578.CHECKDATEVALIDITY'.

如果您想要匹配这个号码,请看一下DBA_SOURCE。例如,这将显示触发器第23-32行上的内容(违规行+/- 5行)。

代码语言:javascript
复制
SELECT line, text
  FROM dba_source
 WHERE owner = 'USER578'
   AND name  = 'CHECKDATEVALIDITY'
   AND line BETWEEN 23 and 32;

当然,我认为这是一个课堂练习,而不是你在现实世界中做的事情。在现实世界中,您将存储在DATE列中,并让Oracle负责确保输入了有效日期。

票数 3
EN

Stack Overflow用户

发布于 2011-06-20 18:09:30

这意味着您(根据自己的规则)插入了一个无效的日期。

如果一天大于31,你的触发点就会升高或-20101,而它就是这样做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6415340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档