mysql select语句在存储过程中调用时返回null

vuktfyat  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(652)

嗨,我正在尝试创建一个简单的过程,其中包含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;

给我一个价值。但是,

CALL testProcedure(@out);

SELECT @out;

返回空值。
注:列的类型为varchar(30)(附加信息)

wmomyfyw

wmomyfyw1#

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

2q5ifsrm

2q5ifsrm2#

问题是对于mysql LOGIN_ID 以及 login_id 是相同的变量,因此不建议将参数和变量命名为其对象或数据库实体(表、列等)的名称,请参见c.1存储程序限制::存储例程中的名称冲突。
有两个选项:1)更改存储过程的输出参数的名称。2) 包括限定符 LOGIN_ID 列,请参见9.2.1标识符限定符。

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

见小提琴。

相关问题