2017-09-03 41 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