加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我的第一个oracle trigger 报错ora-04098:触发器无效且未通过重

发布时间:2020-12-12 15:45:28 所属栏目:百科 来源:网络整理
导读:公司系统需要,临时需要我写一个触发器,我简单的记录了一下我的第一个触发器的编写过程. 第一步,找部分参考资料,看懂大概的逻辑 :http://blog.csdn.NET/qingzhongren/article/details/7969454 第二步,参照资料写自己的触发器逻辑: CREATE OR REPLACE TRIGGER

公司系统需要,临时需要我写一个触发器,我简单的记录了一下我的第一个触发器的编写过程.


第一步,找部分参考资料,看懂大概的逻辑 :http://blog.csdn.NET/qingzhongren/article/details/7969454


第二步,参照资料写自己的触发器逻辑:


CREATE OR REPLACE TRIGGER update_bms_ord_record
AFTER UPDATE OF status ON oms.oms_order
FOR EACH ROW
BEGIN
CASE
WHEN UPDATING('status') THEN
IF :NEW.status='SIGN' THEN
UPDATE bms_ord_record ord SET ord.Be_Sign=1,ord.sign_time=:OLD.ACTUAL_RECEIVE_TIME WHERE ord.relatebill1=:old.relatebill1;
ELSIF :OLD.status='SIGN'
UPDATE bms_ord_record ord SET ord.Be_Sign=0,ord.sign_time=NULL WHERE ord.relatebill1=:OLD.relatebill1;
END IF;
END CASE;
END;
写完上述逻辑后在sql窗口进行执行,未报任何异常;


第三步:测试


我写了一个update语句进行测试,


UPDATE oms_order o SET o.status='SIGN2' WHERE o.relatebill1='50010777';但是报错,



我始终在我的plsql中查询不到我触发器,检查对应的oms_order表,表上确实是有触发器的.


切换用户后,即可能看到自己的触发器,如下图





点击编辑,就可以在右边窗口下面看到相应的错误,或者再次执行一下脚本,错误出现的地方会有黄色光标行停留






最终 根据错误提示,检查确实是在ELSIF 的表达式后少了一个结尾的 then 关键字,加上后,再次进行编译,没有任何错误提示,测试效果也是ok .

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读