mysql - 更新表条目告诉我该表在过程中不存在

标签 mysql

我正在尝试创建一个存储过程,如果库存充足,它会尝试更新订单,但是当尝试更新时(但仅当它在过程中完成时)我收到错误

" 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/

相关文章:

mysql - rails 隐藏字段和/或 sql 数据库关系

mysql - 从mysql中的表中删除所有记录

MYSQL DELETE 查询中的行与 substr

使用 REGEXP 的 MYSQL 查询 - 使其非贪婪

php - 如果设置了所有值,则插入 mysql 查询

mysql - 使用多个表的 SQL 计数

MySQL:将日期范围扩展到新行

php - Android - 如何使用 PHP 从 MySQL 数据库获取响应?

mysql - 如何将逻辑分离 OR SQL 查询更改为连接 AND 以匹配列表中的所有输入参数?

php - 是否可以在 php 中将 mysql 5.6 的加密 CNF 文件与 mysqli 或 PDO 一起使用?