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
相关产品推荐
相关产品推荐

