我正在尝试创建一个存储过程,如果库存充足,它会尝试更新订单,但是当尝试更新时(但仅当它在过程中完成时)我收到错误
" 15:20:05 调用 plswork(@LatestOrder, 2, 20) 错误代码:1109。字段列表中的未知表“产品”0.000 秒 "
到目前为止,我已经尝试查看表名和表键是否有任何错误。我也尝试过在程序之外进行更新,在这里它有效。
Delimiter ¤
create procedure plswork(
in NewOrder INT,
in ProductID INT,
in PurchaseQuantity INT)
begin
start transaction;
insert into Order_items(Oid, Pid, Quantity)
values (NewOrder, ProductID, PurchaseQuantity);
update Product p
set p.Stock = p.Stock - PurchaseQuantity
where p.Pid = p.ProductID;
if((select Product.Stock
where Pid = ProductID) < 0) then
rollback;
else
commit;
end if;
end ¤
Delimiter ;
INSERT INTO Orders(Cid,Order_date, Order_status)
VALUES (1, '2040-01-31 12:11:00' , "SENT");
select @LatestOrder := max(Oid)
from Orders;
call plswork(@LatestOrder, 2, 20);
我该怎么做才能解决我的问题?
最佳答案
我认为错误不是来自 UPDATE
语句。
我认为这个 SQL 语句引发了错误:
select Product.Stock where Pid = ProductID
没有 FROM
子句,因此用表名 Product
限定 Stock
是无效的。
关于mysql - 更新表条目告诉我该表在过程中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380270/