我有一个函数,应该只返回一个元素的值,但这是从每个表返回的
Function verify(idAluno INT) returns INT
BEGIN
DECLARE teste INT;
SELECT COUNT(status) into teste FROM listapresenca WHERE idAluno = idaluno;
RETURN teste;
END
listapresenca中的值是
idAluno status horario
1 ENTROU 2018-09-02 21:46:25
0 NAO 2018-09-02 21:46:43
0 NAO 2018-09-02 21:46:45
0 NAO 2018-09-02 21:46:46
0 NAO 2018-09-02 21:46:48
0 NAO 2018-09-02 21:59:10
将变量idaluno = 1生成的结果应该为1,但返回值为6。
如果我在函数SELECT COUNT(status) FROM listapresenca WHERE idAluno = 1
之外使用,则返回值为1
答案 0 :(得分:0)
问题在于,表中的列名idAluno
与函数中的参数名idAluno
之间存在冲突,因此您的WHERE
子句实际上比较了相同的值并会返回表格中的所有数据(因此您的结果为6)。尝试将参数名称更改为searchId
:
CREATE FUNCTION verify(SearchId INT) returns INT
BEGIN
DECLARE teste INT;
SELECT COUNT(status) into teste FROM listapresenca WHERE idAluno = SearchId;
RETURN teste;
END
然后您可以使用以下方法进行测试:
SELECT verify(1), verify(0)
输出(用于您的数据)
verify(1) verify(0)
1 5
在Rextester上的演示