[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语法错误的主要内容,如果未能解决你的问题,请参考以下文章

UDF 并在 MySql 中运行它

fluent编译UDF的过程中,出现了语法错误

fluent编译UDF时候出现语法错误:

Python Mysql - 查询语法错误

创建函数时出现“MySQL语法错误”[关闭]

Mysql语法错误创建存储过程