3

我在 MySQL 中有一个存储过程,它从表中获取下一个唯一 ID,用作其他 2 个表的 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没有正确设置?

4

2 回答 2

3

通常,在这上面花了 3 个小时,然后就在我发布问题之后,我发现了问题。因此,供将来参考:在涉及变量的情况下,MySQL 似乎不区分大小写。列ID名和id变量显然完全混淆了它。

我将过程的输入参数名称更改为retId,然后它运行良好。

于 2013-07-16T10:29:36.657 回答
0

谢谢尼克,我也有同样的问题。由于我们遇到了问题,列名和变量名相同。

于 2016-05-06T14:02:46.660 回答