0

嗨,我正在尝试创建一个简单的过程,其中包含一个 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 LOGIN_ID INTO login_id FROM mystrodb.USER_REG_MST WHERE USER_MOBILE_NO = 123;

给我一个价值。但,

CALL testProcedure(@out);

SELECT @out;

返回 NULL。

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

4

2 回答 2

3

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

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

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

请参阅dbfiddle

于 2018-08-19T16:10:07.263 回答
1

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

于 2018-08-19T11:41:18.727 回答