gpt4 book ai didi

delphi - Firebird 停用触发器

转载 作者:行者123 更新时间:2023-12-01 18:04:54 26 4
gpt4 key购买 nike

我有客户-->|级联规则|-->orders_table-->|级联规则|-->order_details在我的 order_details 中,我在删除触发器后增加了产品表中的数量

CREATE OR ALTER TRIGGER TABLEAU_DETAIL_VENTES_AD0 FOR TABLEAU_DETAIL_VENTES
ACTIVE AFTER DELETE POSITION 0
AS
declare variable qte numeric_15_2;
begin
select qte_article from tableau_articles where id_article = old.id_article
into :qte;
qte = :qte + old.qte;
update tableau_articles
set qte_article = :qte
where id_article = old.id_article;
end

如果我删除一个客户,则依赖于该客户的所有订单都将被删除以及orders_detail等等。

问题是删除触发器后的 order_details 将被触发并增加产品数量,我不希望发生这种情况。

我的问题:有什么方法可以知道触发器是否已被来自应用程序的级联规则或 sql 删除语句触发?

我想要实现这样的目标:

如果触发器是由级联规则触发的,则禁用_all_triggers。预先感谢您的帮助。

最佳答案

您可以尝试使用 in/activate 触发器的执行语句将删除代码包装在存储过程中

CREATE PROCEDURE DeleteClient(
ID INTEGER)
AS
begin
execute statement 'alter trigger TABLEAU_DETAIL_VENTES_AD0 inactive;';
/*
Your Delete statement here
*/
execute statement 'alter trigger TABLEAU_DETAIL_VENTES_AD0 active;';
END^

关于delphi - Firebird 停用触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com