我创建了一个存储过程,将记录插入表格和表格中。获取该记录的自动递增ID ...这里我在将LAST_INSERT_ID()设置为变量时出现语法错误...
错误1064(42000):您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在')附近使用正确的语法; SET _orderId = SELECT LAST_INSERT_ID(); 结束'第5行
请帮我解决这个问题...在此先感谢...
我的代码如下,
delimiter //
CREATE PROCEDURE placeOrder(IN _cartId INT,IN _createdBy INT)
BEGIN
DECLARE _orderId INT;
-- insert into order
INSERT INTO `TBL_ORDER`(`DealerId`, `OrderNo`, `CreatedBy`) VALUES ((SELECT DealerId FROM TBL_SHOPPING_CART WHERE Id = _cartId),UNIX_TIMESTAMP(),_createdBy));
SET _orderId = SELECT LAST_INSERT_ID();
END//
delimiter ;
答案 0 :(得分:1)
试试这个。
delimiter //
CREATE PROCEDURE placeOrder(IN _cartId INT,IN _createdBy INT)
BEGIN
SET @orderId = '';
-- insert into order
INSERT INTO `TBL_ORDER`(`DealerId`, `OrderNo`, `CreatedBy`) VALUES ((SELECT DealerId FROM TBL_SHOPPING_CART WHERE Id = _cartId),UNIX_TIMESTAMP(),_createdBy));
SELECT LAST_INSERT_ID() INTO @orderId;
END//
delimiter ;
OR
delimiter //
CREATE PROCEDURE placeOrder(IN _cartId INT,IN _createdBy INT)
BEGIN
-- insert into order
INSERT INTO `TBL_ORDER`(`DealerId`, `OrderNo`, `CreatedBy`) VALUES ((SELECT DealerId FROM TBL_SHOPPING_CART WHERE Id = _cartId),UNIX_TIMESTAMP(),_createdBy);
SELECT LAST_INSERT_ID() AS '_orderId ';
END//
delimiter ;
答案 1 :(得分:0)
尝试:
...
-- SET _orderId = SELECT LAST_INSERT_ID();
SET _orderId = LAST_INSERT_ID();
SELECT _orderId;
...
或
...
-- SET _orderId = SELECT LAST_INSERT_ID();
SET _orderId = (SELECT LAST_INSERT_ID());
SELECT _orderId;
...
答案 2 :(得分:0)
您应确保您的应用程序没有全局连接或共享连接。当last_insert_it()
将返回上次生成的AI值时,它可以来自任何表格。特别是如果您的主机应用程序使用异步TASK
Concider以下场景
通常插入速度很快,但假设您的SP必须等待桌面锁定并且延迟。在这种情况下,您将收到错误的ID。
最安全的方法是在交易中对您的SP工作进行封装。获取AI列的最大值(假设它是一个未签名的AI列)。