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

时间:2013-07-16 10:14:57

标签: mysql mysql-workbench

我在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未正确设置的任何想法?

2 个答案:

答案 0 :(得分:3)

通常情况下,花了3个小时,然后在我发布问题后我才发现问题。所以,为了将来参考:在变量方面,MySQL似乎不区分大小写。 ID列名称和id变量显然完全混淆了它。

我将程序的输入参数名称更改为retId,然后它完美运行。

答案 1 :(得分:0)

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