我有一个在MySQL中的存储过程,它从表中获取下一个唯一的ID,用于作为另外两个表的ID(我相信这不是最好的做法,但我正在修改别人的代码)。该过程如下:
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `GetNextID`( OUT id bigint )
BEGIN
DECLARE uid VARCHAR(255);
SET uid = uuid();
INSERT INTO `ident_column_generator` (u) VALUES (uid);
SELECT ID INTO id FROM `ident_column_generator` WHERE u = uid;
DELETE FROM `ident_column_generator` WHERE u = uid;
END$$
当我从MySQL Workbench调用该过程时:
CALL GetNextID( @id );
SELECT @id;
@id 是 NULL
。我搞不清楚出了什么问题?即使在调用过程之前运行 SET @id = 0;
,之后它仍然是 NULL。如果我手动从 MySQL Workbench 调用过程中的函数,则 @id
正常输出,例如:
SET @uid = uuid();
INSERT INTO `ident_column_generator` (u) VALUES (@uid);
SELECT ID INTO @id FROM `ident_column_generator` WHERE u = @uid;
DELETE FROM `ident_column_generator` WHERE u = @uid;
SELECT @id;
这将输出 @id 作为一个有效的数字。
有什么想法为什么 id 没有被正确设置?