存储的函数返回NULL Mysql

时间:2018-06-28 15:39:34

标签: mysql function null

我在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 个答案:

答案 0 :(得分:0)

函数参数的名称为id,但是在users表中也有id列,并且Meeting_participants表中也有id列。 / p>

这会产生歧义。该表达式不知道您是指列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

您应该了解的其他两个问题,即使它们与您的问题无关:

  1. 在MySQL例程中(例如,不同于SQL Server),您的par局部变量与@var会话变量不同。在这种特定情况下,您的代码可以使用,但是您编写的其他某些功能可能会感到困惑。另请参阅我对"@" symbol in stored procedure?

  2. 的回答
  3. 您应该将子句READS SQL DATA添加到函数中,否则可能会出现此错误(就像我在测试函数时所做的那样):

  

错误1418(HY000):此函数的声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用不太安全的log_bin_trust_function_creators变量)