存储的函数计算出不正确的值

时间:2018-09-03 01:15:27

标签: mysql function

我有一个函数,应该只返回一个元素的值,但这是从每个表返回的

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

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上的演示