[Q]:在mysql中创建UDF语法错误

[Q]:Syntax error in creating UDF in mysql

大家好,对于这个菜鸟问题,我很抱歉,我正在努力学习 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

几点...

一个函数return是一个单一的值。

值 return 需要对应于为 RETURNS 指定的类型。

@字符用于命名用户自定义变量,不用于procedure/functionvariables/parameters.

举个例子,尝试这样的事情:

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 ;