Проблема в возврате значений с моей процедурой - PullRequest
1 голос
/ 08 апреля 2019

Следующая процедура не возвращает значения.Что не так?

CREATE PROCEDURE `sp_ValidarLogin`
    (pEmail VARCHAR(45), 
    pSenha VARCHAR(255),
    OUT rId INT,
    OUT rNome VARCHAR(45),
    OUT rDataNascimento DATE)
    SELECT @rId = ID, 
            @rNome = NOME, 
            @rDataNascimento = DATA_NASCIMENTO 
        FROM usuario 
    WHERE EMAIL = pEmail AND SENHA = pSenha;


CALL sp_ValidarLogin ('rcaldas.ti@gmail.com','1234', @id, @nome, @nascimento);--its correct
select @id, @nome, @nascimento;

1 Ответ

0 голосов
/ 08 апреля 2019

Вы должны использовать := вместо = для назначения значений на SELECT:

CREATE PROCEDURE `sp_ValidarLogin` (
    pEmail VARCHAR(45), 
    pSenha VARCHAR(255),
    OUT rId INT,
    OUT rNome VARCHAR(45),
    OUT rDataNascimento DATE)
    SELECT @rId := ID, @rNome := NOME, @rDataNascimento := DATA_NASCIMENTO 
    FROM usuario 
    WHERE EMAIL = pEmail AND SENHA = pSenha;

демо на dbfiddle.uk

Предыдущие выпуски MySQL позволяли присваивать значение пользовательской переменной в операторах, отличных от SET. Эта функциональность поддерживается в MySQL 8.0 для обратной совместимости, но подлежит удалению в будущем выпуске MySQL.

При выполнении назначения таким образом вы должны использовать := в качестве оператора назначения; = рассматривается как оператор сравнения в операторах, отличных от SET.

источник: https://dev.mysql.com/doc/refman/8.0/en/user-variables.html

...