[Q]:mysql创建UDF语法错误
Posted
技术标签:
【中文标题】[Q]:mysql创建UDF语法错误【英文标题】:[Q]:Syntax error in creating UDF in mysql 【发布时间】:2016-06-08 22:12:24 【问题描述】:大家对这个菜鸟问题感到抱歉,我正在尝试学习 mysql,但我一直在创建 udf。有人可以解释为什么这是语法错误以及可能的解决方法是什么。谢谢
create FUNCTION temtotalgrades
(@p_Studid int, @p_year int)
RETURNS int
BEGIN
return (SELECT CONCAT( fname, " ", lname, '\n', GROUP_CONCAT
(student_grades.subject_id, " = ", student_grades.final SEPARATOR '\n' ) )
FROM student_grades
INNER JOIN student ON student.studid = student_grades.studid
where student.studid = @p_Studid and year = @p_year
GROUP BY student_grades.studid)
END
【问题讨论】:
这不是 UDF。这是一个存储函数。前者是用 C 语言编写的,使用插件钩子实际上向服务器添加了一个全局函数;后者是用 SQL 编写的。 【参考方案1】:几点...
函数返回单个值。
要返回的值需要与为 RETURNS 指定的类型相对应。
@
字符用于命名用户定义的变量,而不是用于过程/函数变量/参数。
举个例子,试试这样:
DELIMITER $$
CREATE FUNCTION temtotalgrades
( p_studid INT
, p_year INT
) RETURNS VARCHAR(4000)
BEGIN
DECLARE v_myret VARCHAR(4000);
SELECT CONCAT( s.fname
, ' '
, s.lname
, '\n'
, GROUP_CONCAT(
CONCAT(g.subject_id,' = ',g.final)
SEPARATOR '\n'
)
)
INTO v_myret
FROM student_grades g
JOIN student s ON s.studid = g.studid
WHERE s.studid = p_studid
AND g.year = p_year;
RETURN v_myret;
END$$
DELIMITER ;
【讨论】:
以上是关于[Q]:mysql创建UDF语法错误的主要内容,如果未能解决你的问题,请参考以下文章