2017-09-03 114 views
0

我有一個觸發器,在他內部我宣佈了兩個變量:數量和價格。數量是INT類型,價格是DECIMAL類型(10,2)。這些變量的值由SELECT查詢設置。那很好。現在我想把這兩個變量相乘,這樣我就可以得到總金額。如何計算mysql觸發器內的兩個變量?

TOTAL_AMOUNT =數量*價格

簡化代碼(不工作就在這兒只是爲了更好地描述我的問題):

DROP TRIGGER calculate; 
DELIMITER $$ 
CREATE TRIGGER calculate 
    AFTER INSERT ON order_table 
    FOR EACH ROW 
     BEGIN 
     DECLARE quantity INT; 
     DECLARE price INT; 

     SELECT quantity, price INTO @quantity, @price FROM product; 

     INSERT INTO order_details SET total_amount = @quantity * @price; 

     END$$ 
DELIMITER ; 

有了這個代碼,我得到空的結果。 我正在使用MySQL/MariaDB。

回答

0

我找到簡單的解決方案:

DROP TRIGGER calculate; 
DELIMITER $$ 
CREATE TRIGGER calculate 
    AFTER INSERT ON order_table 
    FOR EACH ROW 
     BEGIN 
     DECLARE totalAmount DECIMAL(10,2); 

     SELECT (quantity * price) INTO @totalAmount FROM product; 

     INSERT INTO order_details SET total_amount = @totalAmount; 

     END$$ 
DELIMITER ; 
0
  1. 在由@ preceeded MySQL的變量是會話變量,而不是局部變量。因此@quantityquantity不一樣。

  2. 您選擇似乎不正確。作爲開始,產品表中的quantity只能是給定產品的可用數量,而不是作爲訂單的一部分訂購的數量。所以,你的業務邏輯似乎是不正確的。其次,select中沒有where子句。在產品表中有超過1條記錄的時刻,您應該會收到錯誤消息(查詢返回多於1行)。

  3. 通過插入,您可以在與當前訂單不相關的訂單明細表中創建新記錄,也不會與任何訂單行相關。

由於缺少表結構描述,我只能確定問題,但不能提出確切的解決方案。

+0

我知道選擇是不正確的,我把它放在這裏只是爲了我需要做的一個例子,它的無關,作爲整個觸發器,只是想知道如何計算變量時,他們是通過select ..但作爲你提到你的答案,如果我只是使用本地變量,我得到了良好的resut – bobby

+0

我們不是很高興發佈的代碼有問題,你知道的問題,你沒有在你的問題中提及這些問題! – Shadow