数据库
首页 > 数据库> > MySQL存储过程:OUT参数未设置

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

作者:互联网

我在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设置不正确?

解决方法:

通常,在此上花了3个小时,然后在发布问题后才发现问题.因此,以供将来参考:在涉及变量的地方,MySQL似乎不区分大小写. ID列名称和id变量显然完全混淆了它.

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

标签:mysql-workbench,mysql
来源: https://codeday.me/bug/20191123/2064446.html