需要写作 MySQL 触发器的指导
Need Guidance with writing MySQL Trigger
我先承认,这是我的第一个 MySQL 触发器。 MySQL 版本为 8.0.
我有一个 table 用于订单和订单行项目。在订单 table 中,我有一列存储所有订单项的总数。我需要一个触发器,在每次为该订单添加或更改订单项时更新总计。这是我目前所拥有的:
CREATE TRIGGER update_line_item_total
AFTER INSERT
ON orderlines.price FOR EACH ROW
BEGIN
-- variable declarations
DECLARE li_order_id INT;
DECLARE li_total DEC;
SET li_order_id = orderlines.order_id;
SET li_total = SUM (orderlines.price) WHERE orderlines.order_id = li_order_id;
-- trigger code
UPDATE orders SET
total_lineitems = li_total
WHERE orders.order_id = li_order_id;
END;
我把这个放到了MySQLWorkbench里面,结果被拒了。我知道 DECLARE 语句、第二个 SET 语句和 END 语句被标记为不正确,但我什至不确定去哪里查找错误。
寻找指导和方向。
谢谢,
迈克尔·弗兰克尔
向导咨询集团公司
您的问题在这一行:SET li_total = SUM (orderlines.price) WHERE orderlines.order_id = li_order_id;
添加分隔符。
这样做:
delimiter |
CREATE TRIGGER update_line_item_total
AFTER INSERT
ON orderlines.price FOR EACH ROW
BEGIN
-- variable declarations
DECLARE li_order_id INT;
DECLARE li_total DEC;
declare li_total_temp dec;
SET li_order_id = orderlines.order_id;
select orderlines.price into li_total_temp WHERE orderlines.order_id = li_order_id;
SET li_total = li_total + li_total_temp;
-- trigger code
UPDATE orders SET
total_lineitems = li_total
WHERE orders.order_id = li_order_id;
END |
delimiter ;
我先承认,这是我的第一个 MySQL 触发器。 MySQL 版本为 8.0.
我有一个 table 用于订单和订单行项目。在订单 table 中,我有一列存储所有订单项的总数。我需要一个触发器,在每次为该订单添加或更改订单项时更新总计。这是我目前所拥有的:
CREATE TRIGGER update_line_item_total
AFTER INSERT
ON orderlines.price FOR EACH ROW
BEGIN
-- variable declarations
DECLARE li_order_id INT;
DECLARE li_total DEC;
SET li_order_id = orderlines.order_id;
SET li_total = SUM (orderlines.price) WHERE orderlines.order_id = li_order_id;
-- trigger code
UPDATE orders SET
total_lineitems = li_total
WHERE orders.order_id = li_order_id;
END;
我把这个放到了MySQLWorkbench里面,结果被拒了。我知道 DECLARE 语句、第二个 SET 语句和 END 语句被标记为不正确,但我什至不确定去哪里查找错误。
寻找指导和方向。
谢谢,
迈克尔·弗兰克尔 向导咨询集团公司
您的问题在这一行:
SET li_total = SUM (orderlines.price) WHERE orderlines.order_id = li_order_id;
添加分隔符。
这样做:
delimiter |
CREATE TRIGGER update_line_item_total
AFTER INSERT
ON orderlines.price FOR EACH ROW
BEGIN
-- variable declarations
DECLARE li_order_id INT;
DECLARE li_total DEC;
declare li_total_temp dec;
SET li_order_id = orderlines.order_id;
select orderlines.price into li_total_temp WHERE orderlines.order_id = li_order_id;
SET li_total = li_total + li_total_temp;
-- trigger code
UPDATE orders SET
total_lineitems = li_total
WHERE orders.order_id = li_order_id;
END |
delimiter ;