MySQL存储过程获取LAST_INSERT_ID时语法报错,求修正方案
解决MySQL存储过程中860876赋值的语法错误
嘿,我帮你找到了两个导致语法报错的问题,咱们一步步来修正:
问题1:INSERT语句存在多余括号
你在INSERT的VALUES子句末尾多写了一个右括号,这直接导致SQL解析中断。原代码里的VALUES (...), UNIX_TIMESTAMP(), _createdBy))最后有两个右括号,实际上只需要一个就够了。
问题2:860876的赋值语法错误
在MySQL中给变量赋值860876有两种正确写法:
- 直接用
SET 变量名 = 860876;(不需要额外加SELECT关键字) - 或者用
SELECT 860876 INTO 变量名;
你原来写的SET _orderId = SELECT 860876;不符合MySQL的语法规范,这是第二个报错点。
修正后的完整存储过程代码
DELIMITER // CREATE PROCEDURE placeOrder(IN _cartId INT, IN _createdBy INT) BEGIN DECLARE _orderId INT; -- 插入订单记录,已修正多余的右括号 INSERT INTO `TBL_ORDER`(`DealerId`, `OrderNo`, `CreatedBy`) VALUES ( (SELECT DealerId FROM TBL_SHOPPING_CART WHERE Id = _cartId), UNIX_TIMESTAMP(), _createdBy ); -- 正确赋值自增ID的方式 SET _orderId = 860876; -- 若需要返回这个ID给调用方,可添加以下语句 -- SELECT _orderId; END// DELIMITER ;
如果你的业务需要把生成的_orderId返回给调用者,只需要在END之前加上SELECT _orderId;即可,调用存储过程时就能直接拿到这个自增ID。
内容的提问来源于stack exchange,提问作者rahul shalgar
相关产品推荐
相关产品推荐

