如果你修复了数据类型,缺少
return
在第二触发器中,
it'll work as expected
.
初始
insert
同时触发两个触发器,然后更新只触发
trigger1
因为尽管它确实试图改变
cost
,它不在的目标列中
update
声明和
trigger2
定义为仅在满足以下条件时才开火(
update or insert
of cost
). 引用
CREATE TRIGGER
doc
:
For
UPDATE
事件,可以使用以下语法指定列列表:
UPDATE OF column_name1 [, column_name2 ... ]
触发器仅在以下情况下才会触发
列出的列中至少有一列被提及为
更新
命令,或者如果列出的列之一是依赖于作为目标的列的生成列
更新
.
它也改变了它从一个
null
静止a
无效的
,所以你不会通过比较来理解它
NEW
vs
OLD
要么。你走了
rate
如果没有默认值,并且您没有在插入、更新或触发器中填写它,那么它将使应该改变成本的表达式无效。
我猜你早就料到了
update of cost
每当有任何东西以任何方式接触到田地时,就会开火,并对其进行更新,但事实并非如此。如果修复了成本计算,则可以设置
触发器2
当事件最终通过使用
trigger..when(condition)
:
condition
一个布尔表达式,用于确定是否实际执行触发器函数。如果
WHEN
如果指定了,则只有在条件返回true时才会调用该函数。In
FOR EACH ROW
触发器
什么时候
条件可以通过以下方式引用旧行和/或新行值的列
OLD.column_name
或
NEW.column_name
分别。当然,
INSERT
触发器不能引用
老
和
DELETE
触发器不能引用
新
.
demo at db<>fiddle
CREATE TRIGGER after_104_calc_parent_cost
AFTER UPDATE ON table1
FOR EACH ROW
WHEN (NEW.cost is distinct from OLD.cost)
EXECUTE PROCEDURE trigger2();