【发布时间】:2019-12-19 12:20:03
【问题描述】:
我正在为个人项目开发此触发器,但我不确定自己做错了什么。触发器编译得很好,并且测试了触发器应该做什么,它可以工作......但是条件不起作用。触发器什么都不做
这是我的代码
CREATE OR REPLACE TRIGGER z_delete
BEFORE INSERT or UPDATE OR INSERT OF status ON TABLE_1
FOR EACH ROW
BEGIN
IF (:new.condition_1 = 'I' or :new.condition_2 ='Z')
THEN
DELETE TABLE_2 WHERE EXISTS
(SELECT * FROM TABLE_1 WHERE TABLE_1.Value_1 = TABLE_2.Value_2 AND TABLE_1.condition_1='I');
DELETE interference_results WHERE EXISTS
(SELECT * FROM TABLE_1 WHERE TABLE_1.Value_1 = TABLE_2.Value_3 AND TABLE_1.condition_1 = 'I');
END IF;
END z_delete;
有人知道发生了什么吗??
提前致谢
【问题讨论】:
-
我希望在触发器的某处引用
:NEW或:OLD。 -
嗨@Luisao,欢迎来到 Stack Overflow。您能否结合以下内容解释一下“并且,测试触发器应该做什么,它可以工作”:“触发器什么也不做”。谢谢!
-
我很惊讶它可以编译,因为第二个 delete 语句引用了一个不在任何
from或join子句中的table_2,我很惊讶它没有当它查询触发器所基于的同一个表时,在运行时给出一个“表正在变异”错误。这与您的实际代码有多相似? -
我同意@WilliamRobertson。而且,当你问一个问题时,尽量保持活跃,已经有两个答案,很少有 cmets,OP 没有回答或反应......
标签: sql oracle if-statement plsql triggers