存储过程输出空结果,但查询成功

Stored Procedure outputs empty results but query is successful

提问人:Jeff 提问时间:9/27/2023 更新时间:9/27/2023 访问量:30

问:

我对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

我完全不知所措,任何帮助将不胜感激。

mysql 变量 stored-procedures

评论

0赞 P.Salmon 9/27/2023
其中 mywhere 返回 false..您采用这种方法而不是 o.univ = myuniv 的原因是什么?
0赞 Jeff 9/27/2023
我正在努力确保将来如果客户需要搜索不止一所大学。在这种情况下,where 条件将是 o.univ = 'univ1' 或 o.univ = 'univ2'。不确定这是否有意义。

答:

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 (, ...)PREPAREEXECUTE

评论

0赞 Jeff 9/27/2023
谢谢,这绝对可以解决问题。我试图像在PHP中一样处理它,以防将来的需求是多所大学,在这种情况下,我会遍历大学来制作where字符串。我将研究动态 SQL。谢谢你的帮助