提问人:Jeff 提问时间:9/27/2023 更新时间:9/27/2023 访问量:30
存储过程输出空结果,但查询成功
Stored Procedure outputs empty results but query is successful
问:
我对MYSQL的存储过程非常陌生。
如果我在我的服务器上运行此代码
select * from groupover o
left join groupatt a on o.myindex = a.myindex and a.sessid = 20231
where o.univ = 'UofU';
我成功获得了结果列表。
但是,当我将该 select 语句传输到存储过程中时,我将 sessid 和 university 转换为变量,它会返回一个空结果集。
我使用具有上述相同信息的调用命令。call getgroups("20231","UofU");
这是我的存储过程。
CREATE DEFINER=`fsadmin`@`142.184.89.102` PROCEDURE `getgroups`(
IN mysessid text(5),
IN myuniv text(10),
)
BEGIN
declare mywhere longtext;
IF myuniv != "N/A" THEN
set mywhere = concat("o.univ = ", myuniv);
select * from groupover o
left join groupatt a on o.myindex = a.myindex and a.sessid = mysessid
where mywhere;
END IF;
END
我完全不知所措,任何帮助将不胜感激。
答:
1赞
slaakso
9/27/2023
#1
条件:
where mywhere;
将不起作用,因为它使查询成为:
select * from groupover o
left join groupatt a on o.myindex = a.myindex and a.sessid = mysessid
where 'o.univ = myuniv_parameter_value';
即,条件变成一个普通的字符串。
您可以做什么:
select * from groupover o
left join groupatt a on o.myindex = a.myindex and a.sessid = mysessid
where o.univ = myuniv;
或者使用动态 SQL (, ...)PREPARE
EXECUTE
评论
0赞
Jeff
9/27/2023
谢谢,这绝对可以解决问题。我试图像在PHP中一样处理它,以防将来的需求是多所大学,在这种情况下,我会遍历大学来制作where字符串。我将研究动态 SQL。谢谢你的帮助
评论