You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle触发器异常触发求助:空FECHASALIDA时始终触发报错

解决Oracle触发器空值触发报错的问题

嘿,我来帮你搞定这个触发器的问题!

问题原因

你现在的触发器条件是直接比较FECHAINGRESO > FECHASALIDA,但在Oracle的SQL三值逻辑里,任何和NULL(空值)做比较的结果都是NULL,而PL/SQL的IF语句会把NULL当作FALSE处理——那为什么你会看到报错?其实是原来的错误信息拼接导致的:当FECHASALIDA为空时,:NEW.FECHASALIDA||'No se puede...'会生成NULLNo se puede...这样的奇怪字符串,让你误以为是触发器触发了校验逻辑,但实际上真正的问题是你的触发器没有先判断FECHASALIDA是否有值,直接进行了无意义的比较。

另外,你的需求是仅当FECHASALIDA早于FECHAINGRESO时才报错,所以必须先排除空值的情况,避免不必要的校验触发。

解决办法

修改触发器的条件,先判断FECHASALIDA不为空,再检查日期顺序,同时替换成你想要的错误提示:

CREATE OR REPLACE TRIGGER FECHASALIDA 
BEFORE INSERT ON EXPEDIENTES 
FOR EACH ROW 
BEGIN
    -- 仅当离开日期已填写,且早于录入日期时触发报错
    IF (:NEW.FECHASALIDA IS NOT NULL AND :NEW.FECHASALIDA < :NEW.FECHAINGRESO) THEN
        RAISE_APPLICATION_ERROR(-20600, 'Hi, you just cant do that bro');
    END IF;
END;
/

额外提示

如果需要在更新案件日期时也触发这个校验,可以把触发器的触发时机改为BEFORE INSERT OR UPDATE,这样修改已有案件的离开日期时也会检查合理性。

内容的提问来源于stack exchange,提问作者Joaquín García Macías

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:20:09