MySQL存储过程:OUT参数未被设置

3

我有一个在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 没有被正确设置?
2个回答

3
通常情况下,我在此上花费了3个小时,然后在发布问题后不久,我就发现了问题。因此,供将来参考:在变量方面,MySQL似乎是不区分大小写的。ID列名和id变量显然使其完全混淆。
我将过程的输入参数名称更改为retId,然后它完美地工作了。

0

谢谢Nick,我也遇到了同样的问题。由于列名和变量名相同,所以我们遇到了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接