在MySQL中存储过程遇到问题

时间:2015-03-30 09:23:59

标签: mysql stored-procedures

我想知道在使用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   第1行orderdeliveredBy,`'

2 个答案:

答案 0 :(得分:0)

带有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 ;

答案 1 :(得分:0)

输入参数名称必须是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;