MySql函数创建错误

时间:2013-07-04 08:06:35

标签: mysql function

我写了一个如下的函数。此功能的目的是通过某个分支中的某个特定考试返回学生的位置。

DELIMITER $$    

CREATE FUNCTION `getMerit`( branch VARCHAR(50), totalMark DECIMAL(19,2), comaSeparetedExamIds VARCHAR(200) ) RETURNS INT(11)
BEGIN
    SET @comaSeparetedExamIds=comaSeparetedExamIds;
    SET @branch =branch;
    SET @marks=totalMark;

    SELECT @place=COUNT(*)+1
    FROM (
        SELECT SUM(m.marks) marks 
        FROM marksheet m, studentinfo s
        WHERE exam_id IN (@comaSeparetedExamIds)
            AND m.student_roll=s.roll_no
            AND s.branch LIKE CONCAT(@branch,'%')
        GROUP BY m.student_roll
    ) AS a
    WHERE a.marks>@totalMark; 

    RETURN @place;
    END$$

DELIMITER ;

但它显示了一个错误。错误是

  

查询:CREATE FUNCTION getMerit(分支varchar(50),totalMark   DECIMAL(19,2),comaSeparetedExamIds varchar(200))RETURNS int(11)   BEG ...错误代码:1415不允许从a返回结果集   功能

我在这里犯了什么错误,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您无法使用@命名输入变量。 @用于user variables,即不需要声明的连接局部变量。

此外,您无法在功能中使用select

程序可以返回结果集但返回值 功能可以返回值,但不能返回结果集。

他们在使用方式上也有所不同。

select function_name(1) from dual;
select id, name, funcation_name(id, name) from anyTable;

call procedure_name(1);

在内部分配变量时,您需要执行:=而不是=。在您的代码中,您实际上选择的是真或假,而不是计数。

这应该有用。

DELIMITER $$    

CREATE FUNCTION `getMerit`( branch VARCHAR(50), totalMark DECIMAL(19,2), comaSeparetedExamIds VARCHAR(200) ) RETURNS INT(11)
BEGIN
    SET @comaSeparetedExamIds=comaSeparetedExamIds;
    SET @branch =branch;
    SET @marks=totalMark;

    SELECT COUNT(*)+1 INTO @place
    FROM (
        SELECT SUM(m.marks) marks 
        FROM marksheet m, studentinfo s
        WHERE exam_id IN (@comaSeparetedExamIds)
            AND m.student_roll=s.roll_no
            AND s.branch LIKE CONCAT(@branch,'%')
        GROUP BY m.student_roll
    ) AS a
    WHERE a.marks>@totalMark; 

    RETURN @place;
    END$$

DELIMITER ;