2016-12-15 104 views
0

Snippet of ER-diagram触发语法错误

我试图创建触发器给一个值“(从‘订单’)SumBeforeTaxes”。

“SumBeforeTaxes”是itemQuantity(来自'order_item')x price('来自itemsinstock')。

因此,如果某人订购了3件,每件10美元,“SumBeforeTaxes”将为3 x 10(共30件)。同样,如果已经订购了3件商品,每件10美元,2件商品每件15件,“SumBeforeTaxes”应该是3x10 + 2x15(共60件)。

这是我到目前为止尝试的 - 但我不断收到语法错误。我也不确定我的触发器(尽管语法错误)是正确的。

第一次尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT` 
AFTER INSERT ON `order_item` FOR EACH ROW 

BEGIN 

SET getItemPrice = (SELECT Price FROM itemsinstock); 

INSERT orderdb.'order' 
SET SumBeforeTax = itemQuantity * getItemPrice; 

END 

第2次尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT` 
AFTER INSERT ON `order_item` FOR EACH ROW 

BEGIN 


SET getItemPrice = (SELECT Price FROM itemsinstock); 

INSERT INTO orderdb.'order' (SumBeforeTax) VALUES (new.itemQuantity * getItemPrice); 

END 

第三尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT` 
AFTER INSERT ON `order_item` FOR EACH ROW 
BEGIN 

declare getItemPrice DOUBLE; 

SET getItemPrice = (SELECT Price FROM itemsinstock WHERE ItemID = new.itemID); 

INSERT INTO orderdb.'order'(SumBeforeTax) VALUES (itemQuantity * getItemPrice); 

END 

我能在这一个小的帮助?

回答

1

orderMySQL中的一个保留字,因此您需要像下面那样为您的INSERT声明使用backtique进行转义。

INSERT INTO orderdb.`order`(SumBeforeTax) VALUES (itemQuantity * getItemPrice); 

对于任何语法澄清,请参阅Documentation On CREATE TRIGGER Syntax

您可能需要使用UPDATE语句,而改变你的代码象下面这样的话:

BEGIN 
declare getItemPrice DOUBLE; 

SELECT Price INTO getItemPrice FROM itemsinstock WHERE ItemID = new.itemID; 

UPDATE orderdb.`order` SET SumBeforeTax = new.itemQuantity * getItemPrice 
WHERE OrderID = 101; 
+0

itemQuantity是从表“order_item”。底部一个:) 我刚刚添加了''来订购,但我仍然得到一个语法错误。我会尝试访问你刚刚发布的链接:) – Charles

+0

@Charles,如果有帮助,请参阅编辑答案。 – Rahul

+0

啊!这工作:)我看到更新效果更好。非常感谢 :) – Charles