嗨,我正在尝试创建一个带有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)(附加信息)
答案 0 :(得分:1)
问题在于,对于MySQL LOGIN_ID
和login_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 ;