我写了一个如下的函数。此功能的目的是通过某个分支中的某个特定考试返回学生的位置。
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返回结果集 功能
我在这里犯了什么错误,有人可以帮助我吗?
答案 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 ;