我的程序返回值时出现问题

时间:2019-04-08 17:31:20

标签: mysql procedure

以下过程不返回值。怎么了?

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 :(得分:0)

您必须使用:=而不是=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;

demo on dbfiddle.uk

  

以前的MySQL版本使得可以在SET以外的语句中为用户变量分配值。 MySQL 8.0支持此功能以实现向后兼容,但是在将来的MySQL版本中可能会删除该功能。

     

以这种方式进行分配时,必须使用:=作为分配操作符; =SET以外的语句中被视为比较运算符。

     

来源: https://dev.mysql.com/doc/refman/8.0/en/user-variables.html