【问题标题】:Having trouble with stored procedures in MySQLMySQL中的存储过程有问题
【发布时间】:2015-06-03 06:05:20
【问题描述】:

我想知道使用 XAMPP 创建此存储过程时哪里出错了。

use PizzaShop;

delimiter /

CREATE PROCEDURE `updateDelivery` (IN @driver INT(3), IN @orderNum INT(5))
BEGIN
INSERT INTO `orders`(`deliveredBy`,`complete`) VALUES(@driver ,TRUE) WHERE orders.Order_No = @orderNum;
end;
/

delimiter ;

我得到的错误是

1064 - 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近'@driver INT(3), IN @orderNum INT(5)) BEGIN INSERT INTO order(deliveredBy,`' 在第 1 行

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    输入参数名称需要是 SP 的局部变量,但不能使用会话变量标识符语法。

    改变

    (IN @driver INT(3), IN @orderNum INT(5))
    

    收件人

    (IN driver INT(3), IN orderNum INT(5))
    

    SP 正文中的insert 语句将是

    INSERT INTO `orders`(`deliveredBy`,`complete`)
    VALUES (driver ,TRUE) WHERE orders.Order_No = orderNum;
    

    【讨论】:

    • insert ... where 不是有效的构造。
    • 是的,应该是update ...我只专注于最初的语法错误... :)
    【解决方案2】:

    带有 where 子句的 insert 语句的语法无效并且没有多大意义。 where 子句的存在表明您可能想要做的是更新?

    use PizzaShop;
    
    delimiter /
    
    CREATE PROCEDURE `updateDelivery` (IN driver INT(3), IN orderNum INT(5))
    BEGIN
      UPDATE orders
      SET deliveredBy = driver, completed = TRUE
      WHERE orders.Order_No = orderNum;
    END /
    
    delimiter ;
    

    【讨论】:

    • 对不起,我已经更正了。更正后同样的错误:(
    • 现在工作正常。很好发现:P
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2022-01-24
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多