存储函数返回空mysql

bvuwiixz  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(413)

我在mysql中创建了一个简单的存储函数,返回逗号分隔的电子邮件:

CREATE FUNCTION get_participantes (id INT) RETURNS VARCHAR(50)
BEGIN
 DECLARE par VARCHAR(50) DEFAULT "";
 (select GROUP_CONCAT(mail SEPARATOR ',') INTO @par from users where id IN (
select user_id from meeting_participants where meeting_id = id));
 RETURN @par;
END

但是当我使用select调用它时,每次都得到null。sql语句除了自身之外,工作得很好。

+----------------------+
| get_participantes(5) |
+----------------------+
| NULL                 |
+----------------------+

请帮忙

xesrikrc

xesrikrc1#

函数参数的名称是 id ,但您还有一个列 id 在你的用户表中,可能有一个 id 您的会议参与者表中的列。
这就产生了歧义。这个表达式不知道你指的是不是这个列 id 或函数参数 id .
应该为函数参数指定一个不同的名称,以解决歧义。

CREATE FUNCTION get_participantes (_id INT) RETURNS VARCHAR(50)
READS SQL DATA
BEGIN
 DECLARE par VARCHAR(50) DEFAULT "";
 (select GROUP_CONCAT(mail SEPARATOR ',') INTO par from users where id IN (
select user_id from meeting_participants where meeting_id = _id));
 RETURN par;
END

你应该知道的几个其他问题,即使它们与你的问题无关:
在mysql例程中(与sqlserver不同),您的 par 局部变量与 @var 会话变量。在这种特定情况下,您的代码可以工作,但您编写的其他函数可能会混淆。另请参阅我对存储过程中“@”符号的回答?
你应该加上这个条款 READS SQL DATA 或者您可能会得到这个错误(就像我测试您的函数时所做的那样):
错误1418(hy000):此函数在其声明中没有确定性、无sql或读取sql数据,并且启用了二进制日志记录(您可能希望使用不太安全的log\u bin\u trust\u function\u creators变量)

相关问题