>我在MySQL中制作了这个简单的STORED FUNCTION,它返回带有逗号的电子邮件:
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 |
+----------------------+
请帮忙
函数参数的名称是id
,但您的 users 表中也有一列id
,并且您的 meeting_participants 表中也可能有一个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例程中(与SQL Server不同(,您的
par
局部变量与@var
会话变量不同。在这种特定情况下,您的代码将起作用,但您编写的其他某些函数可能会混淆。另请参阅我对存储过程中"@"符号的回答?您应该将子句
READS SQL DATA
添加到您的函数中,否则您可能会收到此错误(就像我在测试您的函数时所做的那样(:
错误 1418 (HY000(:此函数的声明中没有确定性、无 SQL 或读取 SQL 数据,并且启用了二进制日志记录(您可能希望使用不太安全的 log_bin_trust_function_creators 变量(