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

Oracle触发器插入记录时按test_lead_id条件替换test_id值问题求助

触发器问题修复方案

你编写的触发器存在3个核心问题:

  • INSERT触发器中无法使用:old变量:INSERT操作只有待插入的新记录,没有旧记录实体,:old仅在UPDATE、DELETE触发器中可用,需要读取的插入字段都要从:new变量中获取
  • 语法使用错误:PL/SQL中WHEN不能直接跟在赋值语句后,判断逻辑需要合并到IF的条件表达式中
  • 业务逻辑不匹配:你的需求是判断test_lead_id的取值,原触发器的判断条件为不存在的:old.test_id,和需求完全不符

按照你的需求(仅当test_lead_id的值为'150'或'151'时,将新插入记录的test_id值替换为'2000'),修复后的触发器代码如下:

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT ON "test_list" 
FOR EACH ROW 
BEGIN 
  IF :new.test_lead_id IN ('150','151') THEN
    :new.test_id := '2000';
  END IF; 
END;
/

如果你有额外限制条件:需要同时满足插入时自带的test_id为'1000'且test_lead_id符合要求才修改,可以使用以下版本:

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT ON "test_list" 
FOR EACH ROW 
BEGIN 
  IF :new.test_lead_id IN ('150','151') AND :new.test_id = '1000' THEN
    :new.test_id := '2000';
  END IF; 
END;
/

内容的提问来源于stack exchange,提问作者Fredro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:01