在销售表中插入记录时,我需要更新产品表中的库存。
这些是我的桌子:
餐桌产品:
curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -mjson.tool
销售表:
curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -c 'import sys, json; print(json.load(sys.stdin)["id"])'
这些是我的存储过程:
idprod int primary key
name varchar (20)
description varchar (100)
int stock
首先,我用一些数据填充表产品,然后调用过程add_sale。我对sales表中的第一个记录没有任何问题,但是当我添加更多记录时,products表中所有产品的库存都会更新,而不仅仅是一个。
答案 0 :(得分:0)
我已经阅读了您的问题,您有两个存储过程,但是在update_stock()存储过程中,您尚未定义WHERE子句,因此您的存储过程应该像这样
create procedure update_stock(
@id int
)
begin
update products p,
sales s
set products.stock = products.stock-s.quantity WHERE p.idprod = s.idprod and WHERE p.idprod=@idvalue ;
end
答案 1 :(得分:0)
您的更新子句中缺少插入的产品ID。您必须通过update_stock()
通话来传递它。
修改update_stock
过程以将产品ID和数量作为输入,如下所示。
CREATE PROCEDURE update_stock(IN pid INT, IN qua INT)
BEGIN
UPDATE products
SET stock = stock - qua
WHERE idprod = pid;
END
通过将qua
传递给该过程,我们可以防止额外连接到另一个表。
然后通过传递update_stock
和add_sale
,在pid
中调用qua
方法,如下所示。
call update_stock (p_id, qua);