2016-12-15 106 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