2 个表之间的 SQL 触发器出错,其中一个表在另一个表上有外键
Error on an SQL trigger between 2 tables, one of which has a foreign key on the other
您好,我遇到了触发器的 问题,我不明白我的错误。
脚本编译但是当我删除一个元素时我有这个错误
CREATE OR REPLACE FUNCTION delete_foreign_key() RETURNS TRIGGER AS $_$
BEGIN
delete from planning.ordrelivraison_history
where ordrelivraison_history.ordrelivraisonid = old.planning.ordrelivraison.ordreid;
RETURN OLD;
END;
$_$ LANGUAGE plpgsql;
Create trigger delete_foreign_key_in_order_delivery_history
after delete
on planning.ordrelivraison_history
for each row
execute procedure delete_foreign_key();
------------------------------------------------------
delete
from planning.ordrelivraison
where ordreid = 1656
说错话
错误:错误:“交货单”上的更新或删除 table 违反了外键约束
“Ordrelivraison_history_ordreid”来自“ordrelivraison_history”table
详细信息:密钥 (orderid) = (1656) 始终从“ordrelivraison_history”table.
中引用
SQL 状态:23503
你的毛病是在错误的时间扣动了扳机。您将其声明为 AFTER delete
但这使它成为 after statement 触发器,不幸的是,触发器函数不会在 after 语句触发器上获取 old/new 行。请参阅 CREATE TRIGGER 文档。将触发器更改为:
Create trigger delete_foreign_key_in_order_delivery_history
after delete
on ordrelivraison_history
for each row
execute procedure delete_foreign_key();
您好,我遇到了触发器的
CREATE OR REPLACE FUNCTION delete_foreign_key() RETURNS TRIGGER AS $_$
BEGIN
delete from planning.ordrelivraison_history
where ordrelivraison_history.ordrelivraisonid = old.planning.ordrelivraison.ordreid;
RETURN OLD;
END;
$_$ LANGUAGE plpgsql;
Create trigger delete_foreign_key_in_order_delivery_history
after delete
on planning.ordrelivraison_history
for each row
execute procedure delete_foreign_key();
------------------------------------------------------
delete
from planning.ordrelivraison
where ordreid = 1656
说错话
错误:错误:“交货单”上的更新或删除 table 违反了外键约束 “Ordrelivraison_history_ordreid”来自“ordrelivraison_history”table 详细信息:密钥 (orderid) = (1656) 始终从“ordrelivraison_history”table.
中引用SQL 状态:23503
你的毛病是在错误的时间扣动了扳机。您将其声明为 AFTER delete
但这使它成为 after statement 触发器,不幸的是,触发器函数不会在 after 语句触发器上获取 old/new 行。请参阅 CREATE TRIGGER 文档。将触发器更改为:
Create trigger delete_foreign_key_in_order_delivery_history
after delete
on ordrelivraison_history
for each row
execute procedure delete_foreign_key();