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

MYSQL SELECT语句在存储过程中调用时返回null,mysql,sql,select,stored-procedures,Mysql,Sql,Select,Stored Procedures,您好,我正在尝试创建一个简单的过程,其中包含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 satatement时,它会独立地返回一个值,但在存储过程

您好,我正在尝试创建一个简单的过程,其中包含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 satatement时,它会独立地返回一个值,但在存储过程内部调用select时,它会返回null

SELECT LOGIN_ID INTO login_id FROM mystrodb.USER_REG_MST WHERE USER_MOBILE_NO = 123;
给我一个价值。 但是,

返回空值


注意:列的类型为VARCHAR(30)(附加信息)

您需要设置
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 ;

您需要设置
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 ;

问题在于MySQL的
LOGIN\u ID
LOGIN\u ID
是同一个变量,因此不建议将参数和变量命名为其对象或数据库实体(表、列等)的名称,请参阅

有两个选项:1)更改存储过程的输出参数的名称。2) 在
LOGIN\u ID
列中包含限定符,请参阅

。。。
选择“用户注册MST”。“登录ID”进入“登录ID”。。。
...

请参阅。

问题在于MySQL的
LOGIN\u ID
LOGIN\u ID
是同一个变量,因此不建议将参数和变量命名为其对象或数据库实体(表、列等)的名称,请参阅

有两个选项:1)更改存储过程的输出参数的名称。2) 在
LOGIN\u ID
列中包含限定符,请参阅

。。。
选择“用户注册MST”。“登录ID”进入“登录ID”。。。
...

请参阅。

对我来说很好。顺便说一句,这两个查询是不同的。我需要做两个更改中的一个以使其工作:要么将过程变量的名称更改为login_id以外的名称,要么在select中显式地将表名放在字段名之前。谢谢koen,这很有效。看起来登录ID冲突。对我来说很好。顺便说一句,这两个查询是不同的。我需要做两个更改中的一个以使其工作:要么将过程变量的名称更改为login_id以外的名称,要么在select中显式地将表名放在字段名之前。谢谢koen,这很有效。看起来登录ID冲突。