繁体   English   中英

在存储过程中调用时,MYSQL SELECT语句返回null

[英]MYSQL SELECT statement returns null when called inside a Stored Procedure

嗨,我正在尝试创建一个带有select语句的简单过程:

DELIMITER //
CREATE PROCEDURE testProcedure(OUT login_id VARCHAR(30))
BEGIN
    SELECT LOGIN_ID INTO login_id FROM USER_REG_MST WHERE USER_MOBILE_NO = 123;
END//
DELIMITER ;

当在过程中被调用时,select满足条件将独立返回一个值,但是在存储过程内部调用select时,它将返回null。

SELECT LOGIN_ID INTO login_id FROM mystrodb.USER_REG_MST WHERE USER_MOBILE_NO = 123;

给我一个价值。 但,

CALL testProcedure(@out);

SELECT @out;

返回NULL。

注意:这些列的类型为VARCHAR(30)(其他信息)

问题是对于MySQL LOGIN_IDlogin_id是相同的变量,因此不建议将参数和变量命名为数据库中对象或实体(表,列等)的名称,请参阅C.1存储限制。程序::存储的例程中的名称冲突

有两个选项:1)更改存储过程的输出参数名称。 2)在LOGIN_ID列中包含一个限定符,请参阅9.2.1标识符限定符

...
SELECT `USER_REG_MST`.`LOGIN_ID` INTO `login_id` ...
...

请参见dbfiddle

您需要设置OUT参数,并确保区分列名和参数名:

DELIMITER //
CREATE PROCEDURE testProcedure(OUT login_id VARCHAR(30))
BEGIN
    SET login_id = (SELECT u.LOGIN_ID 
                    FROM USER_REG_MST u WHERE USER_MOBILE_NO = 123);
END//
DELIMITER ;

DBFiddle演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM