gpt4 book ai didi

mysql - 我在使用 sql 创建触发器的代码中存在语法错误。我使用mysql版本14.14

转载 作者:行者123 更新时间:2023-11-29 23:03:35 24 4
gpt4 key购买 nike

嘿,大家好,我的触发器中有语法错误,我不知道为什么!我在一家销售公司的数据库中有 3 个表,即 ORDERS、SALESREPS 和 PRODUCTS。每当下订单时,我都必须将该订单添加到 ORDERS 表中。订单成本将添加到 SALESREPS 表的 SALES 列中。请注意,销售代表是销售产品的人员表,销售列存储各个销售人员的销售总额。此外,产品表(这是一个包含所有产品及其详细信息的列表)包含“现有数量”列。因此,当下订单时,我必须从下订单之前的可用数量中减少订单数量。

我收到语法错误

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON ORDERS AFTER INSERT AS UPDATE SALESREPS SET SALES=SALES+INSERTED.AMOUNT' at line 2

这是我的触发器代码:

CREATE TRIGGER test_trigger
ON ORDERS AFTER INSERT AS
UPDATE SALESREPS
SET SALES=SALES+INSERTED.AMOUNT
FROM SALESREPS,INSERTED
WHERE SALESREPS.EMPL_NUM=INSERTED.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND=QTY_IN_HAND - INSERTED.QTY
FROM PRODUCTS,INSERTED
WHERE PRODUCTS.MFR_ID=INSERTED.MFR
AND PRODUCTS.PRODUCT_ID=INSERTED.PRODUCT;

另外,由于我的更新表基于插入的元组,我如何引用插入的元组?

最佳答案

您这里有多个语法问题,但我认为这就是您所需要的

DELIMITER $$
CREATE TRIGGER test_trigger
AFTER INSERT ON ORDERS
FOR EACH ROW BEGIN
UPDATE SALESREPS
SET SALES=SALES+NEW.AMOUNT
WHERE SALESREPS.EMPL_NUM=NEW.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND= (QTY_IN_HAND - NEW.QTY)
WHERE PRODUCTS.MFR_ID=NEW.MFR_ID
AND PRODUCTS.PRODUCT_ID=NEW.PRODUCT;
END;$$
DELIMITER ;

你的第一个问题是这一行:

ON ORDERS AFTER INSERT AS

需要恢复哪些内容

AFTER INSERT ON ORDERS

请注意,我删除了 AS

您还缺少FOR EACH ROW BEGIN/END 

请注意,在开始时我将分隔符指定为 $$,以便编译器知道何时停止。

此外,update 语句不得包含 from 子句,因为您已经在第一个语句中指定了要更新的

UPDATE SALESREPS

下一个问题是当您尝试引用新值时,要访问的指定关键字就像 new 一样简单。

您的最后一个错误是您的条件where products.mfr_id = new.mfr您可能只是在这里犯了一个拼写错误,您想要使用where products.mfr_id = new.mfr_id

关于mysql - 我在使用 sql 创建触发器的代码中存在语法错误。我使用mysql版本14.14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28383218/

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