嗨,我正在尝试创建一个简单的过程,其中包含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)(附加信息)
2条答案
按热度按时间wmomyfyw1#
你需要设置
OUT
参数,并确保区分列名和参数名:dbfiddle演示
2q5ifsrm2#
问题是对于mysql
LOGIN_ID
以及login_id
是相同的变量,因此不建议将参数和变量命名为其对象或数据库实体(表、列等)的名称,请参见c.1存储程序限制::存储例程中的名称冲突。有两个选项:1)更改存储过程的输出参数的名称。2) 包括限定符
LOGIN_ID
列,请参见9.2.1标识符限定符。见小提琴。