[英]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_ID
和login_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 ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.