mysql - 为什么我在这个 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 语句有关。任何帮助将不胜感激,谢谢
解决方案
您可以将其简化为以下
但是更新子句需要另一个 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
推荐阅读
- docker - Apache Oozie 可以运行 docker 容器吗?
- zooming - Plotly 双击 unzoom 对我不起作用
- c++ - 分配器和重新绑定如何与容器一起使用?
- excel - Excel VBA函数确定行号
- javascript - 是否可以在直播视频上添加过滤器?
- javascript - 如何在右侧对齐垂直轴?
- php - 需要帮助从 md5 更新到 sha-512 Authorize.net
- c - 如何同时正确使用管道和信号?
- java - 为什么我无法连接到作为 Docker 容器运行的 HBase?
- arrays - 有没有办法比较一个数字序列与 Ruby 中另一个数字序列的相似程度?