mysql存储过程 设置out 参数_MySQL存储过程:OUT参数未设置

本文介绍了一个MySQL存储过程中变量赋值的问题及解决办法。作者在一个存储过程中尝试获取唯一ID并将其赋值给一个变量,但在调用存储过程后发现变量值为空。通过逐一排查,最终发现MySQL对于变量名的大小写敏感性导致了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bd96500e110b49cbb3cd949968f18be7.png

I've got a stored procedure in MySQL that gets the next unique ID from a table, to use as an ID for 2 other tables (not the best way to do it, I'm sure, but I'm modifying someone else's code here). The procedure is as follows:

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$$

When I call the procedure from MySQL Workbench:

CALL GetNextID( @id );

SELECT @id;

@id is NULL. I can't work out what's going wrong? Even if I run SET @id = 0; before calling the procedure, it ends up as NULL afterwards. If I call the functions within the procedure manually from MySQL Workbench, @id outputs fine, e.g.:

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;

This outputs @id as being a valid number.

Any ideas why id isn't being set properly?

解决方案

Typically, spent 3 hours on this, then JUST after I posted the question I find the problem. So, for future reference: It appears MySQL is case insensitive where variables are concerned. The ID column name and id variable apparently completely confused it.

I changed the procedure's input parameter name to retId and then it worked perfectly.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值