Хранимая функция вычисляет неверное значение - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть функция, которая должна возвращать значение только одного элемента, но это возвращается из каждой таблицы

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 голосов
/ 03 сентября 2018

Проблема в том, что у вас есть конфликт между именем столбца 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...