我在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 |
+----------------------+
请帮忙
1条答案
按热度按时间xesrikrc1#
函数参数的名称是
id
,但您还有一个列id
在你的用户表中,可能有一个id
您的会议参与者表中的列。这就产生了歧义。这个表达式不知道你指的是不是这个列
id
或函数参数id
.应该为函数参数指定一个不同的名称,以解决歧义。
你应该知道的几个其他问题,即使它们与你的问题无关:
在mysql例程中(与sqlserver不同),您的
par
局部变量与@var
会话变量。在这种特定情况下,您的代码可以工作,但您编写的其他函数可能会混淆。另请参阅我对存储过程中“@”符号的回答?你应该加上这个条款
READS SQL DATA
或者您可能会得到这个错误(就像我测试您的函数时所做的那样):错误1418(hy000):此函数在其声明中没有确定性、无sql或读取sql数据,并且启用了二进制日志记录(您可能希望使用不太安全的log\u bin\u trust\u function\u creators变量)