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

时间:2018-08-19 11:30:59

标签: 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满足条件在过程中被单独调用时会返回一个值,但是在存储过程内部调用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)(附加信息)

2 个答案:

答案 0 :(得分:1)

问题在于,对于MySQL LOGIN_IDlogin_id是相同的变量,因此不建议将参数和变量命名为其对象或实体(表,列等)的名称。数据库,请参见C.1 Restrictions on Stored Programs :: Name Conflicts within Stored Routines

几个选项:1)更改存储过程的输出参数名称。 2)在LOGIN_ID列中包含一个限定词,请参见9.2.1 Identifier Qualifiers

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

请参见dbfiddle

答案 1 :(得分:0)

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