在存储过程中未接收输入值

Not receiving input value in stored procedure

提问人:Sonicx 提问时间:11/24/2022 最后编辑:Sonicx 更新时间:11/26/2022 访问量:176

问:

我在存储过程中传递参数,但在使用输入进行过滤时无法获取记录。但是当我将输入存储到变量中并将其传递给获取记录时,我得到了记录。 下面是存储过程

DELIMITER $$

DROP PROCEDURE IF EXISTS Demo_akg$$

CREATE PROCEDURE Demo_akg (IN ip_Id VARCHAR (100))

BEGIN 
SELECT * FROM table_namel IAS WHERE Id = ip_Id;

END$$

DELIMITER;

我尝试在变量中获取输入并将其传递给 where 子句 ti fetch records。 这是我尝试过的方法。它起作用了,为什么?

DELIMITER $$

DROP PROCEDURE IF EXISTS Demo_akg$$

CREATE PROCEDURE Demo_akg (IN ip_Id VARCHAR (100))

BEGIN 
Select ip_Id into @ip_Id;
SELECT * FROM table_namel IAS WHERE Id = @ip_Id;

END$$

DELIMITER;
mysql 存储过程 参数传递

评论

0赞 Barmar 11/24/2022
为什么你认为它不应该以同样的方式工作?在查询中使用局部变量和用户变量没有区别。
0赞 Sonicx 11/24/2022
是的,我有同样的怀疑,这是一样的。
0赞 Barmar 11/24/2022
你的意思是说“它不起作用”吗?
0赞 Sonicx 11/24/2022
是的,当我在没有用户变量的情况下运行时,我得到 0 条记录,但是当使用该变量时,我能够获得记录。
1赞 P.Salmon 11/24/2022
请添加 CALL 语句。

答:

0赞 Ivan Cachicatari 11/26/2022 #1

我们不知道table_namel的结构,但似乎该表有一个与输入参数同名的字段。

为了防止这种情况,请使用带有一些前缀/surfix的参数:

DELIMITER $$
DROP PROCEDURE IF EXISTS Demo_akg$$
CREATE PROCEDURE Demo_akg (IN p_ip_Id VARCHAR (100))
BEGIN 
    SELECT * FROM table_namel IAS WHERE Id = p_ip_Id;

END$$

DELIMITER;