我在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
未正确设置的任何想法?
答案 0 :(得分:3)
通常情况下,花了3个小时,然后在我发布问题后我才发现问题。所以,为了将来参考:在变量方面,MySQL似乎不区分大小写。 ID
列名称和id
变量显然完全混淆了它。
我将程序的输入参数名称更改为retId
,然后它完美运行。
答案 1 :(得分:0)
谢谢尼克,我也有同样的问题。由于我们遇到了问题,列名和变量名相同。