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