2016-12-15 3 views
0

Snippet of ER-diagramTrigger синтаксис неправильно

Я пытаюсь создать триггер, чтобы дать «SumBeforeTaxes (от„порядка“)» значение.

«SumBeforeTaxes» - itemQuantity (from 'order_item') x price ('from 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 

вторая попытка:

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

order является зарезервированным словом в MySQL, и поэтому вам нужно сбежать от него, как показано ниже, с помощью backtique для вашего заявления INSERT.

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». Bottom one :) Я просто добавил '' на заказ, но я все еще получаю синтаксическую ошибку. Я попробую посетить ссылку, которую вы только что разместили :) – Charles

+0

@Charles, см. Править в ответ, если это помогает. – Rahul

+0

Ahh! Это сработало :) Я вижу, что обновление работает лучше. Большое спасибо :) – Charles

Смежные вопросы