首页 > 解决方案 > 为什么我在这个 MySQL 触发器中不断收到错误 1172?

问题描述

我想要做的是:

创建一个名为 trg_cust_balance 的触发器,它将在添加新的 CHARTER 行之前自动更新 AC_CUSTOMER 表的 CUS_BALANCE。使用 CHARTER 表的 CHAR_TOT_CHG 作为更新源(假设所有租船费用都计入客户余额。)除 CHAR_TOT_CHG 外,租船使用的每夸脱石油添加 25 美元。

这是我的代码:

create trigger trg_cust_balance
before insert on CHARTER
for each row
begin
declare CHG_PRIOR double;
declare OIL_QUANT double;

select CHAR_OIL_QTS into OIL_QUANT
from CHARTER
order by CUS_CODE;

select CHAR_TOT_CHG into CHG_PRIOR
from CHARTER
order by CUS_CODE;

update AC_CUSTOMER
set CUS_BALANCE = CUS_BALANCE + CHG_PRIOR + (OIL_QUANT * 25);
end;
// delimiter ; 

所以基本上我在这里做的是提取油的数量(CHAR_OIL_QTS)和总电荷(CHAR_TOT_CHG)并将它们变成变量。然后试图使客户余额(CUS_BALANCE)等于它加上所说的费用。但是,我不断收到 1172 错误,我不知道为什么。我怀疑这与两个 select 语句有关。任何帮助将不胜感激,谢谢

标签: mysqltriggers

解决方案


您可以将其简化为以下

但是更新子句需要另一个 WHERE 子句,以便正确的客户获得平衡更改

drop trigger if exists trg_cust_balance;
delimiter //
create trigger trg_cust_balance
before insert on CHARTER
for each row
begin

update AC_CUSTOMER
set CUS_BALANCE = CUS_BALANCE + NEW.CHAR_TOT_CHG + (NEW.CHAR_OIL_QTS * 25)
where AC_CUSTOMER.CUS_CODE = NEW.CUS_CODE;
end// 
delimiter ;

INSERT INTO CHARTER VALUES(10019,'2020-02-10','4278Y','TYS',644,3.8,4.5,167.4,0,10017);

Thsi 在没有 proem 的情况下运行https://www.db-fiddle.com/f/29eiHwfNHDrL34VQ8CSPAF/1


推荐阅读