Re: retorno de varios parâmetros
Lucas Michel Wrote:
-------------------------------------------------------
> como recuperar mais de um parâmetro de retorno
> fas stored procedres?
> do tipo a seguir
>
> DROP PROCEDURE IF EXISTS
> `cse_2008`.`TESTA_EXISTENCIA_MATERIAL` $$
> CREATE DEFINER=`root`@`localhost` PROCEDURE
> `TESTA_EXISTENCIA_MATERIAL`
> (
> nome varchar(100),
> senha varchar(100),
>
> out
> estado int,
> cod int,
> msg varchar(100)
> )
olá a todos, me estressei bastante como sempre mas consegui contornar o problema, ilustrando melhor o problema vou mostrar um exemplo melhor:
DELIMITER //
CREATE PROCEDURE `mbc`.`UsuarioLogin`
(
in
login_entrada varchar(45),
senha_entrada varchar(45),
out
retorno int,
msg varchar(150),
id_usuario int
)
BEGIN
declare senha_interno varchar(47);
select idusuario, senha into @id_usuario, senha_interno from usuario where login = login_entrada;
if(senha_interno is null) then
begin
set @retorno = 1;
set @msg = 'Usuário inexistente';
set @id_usuario = 0;
end;
else
begin
if(senha_interno <> senha_entrada) then
begin
set @retorno = 2;
set @msg = 'Senha de usuario inválida';
set @id_usuario = 0;
end;
else
begin
set @retorno = 3;
set @msg = concat ('Usuário ',login_entrada,' liberado com sucesso!');
end;
end if;
end;
end if;
END//
o que acontecia é que quando eu tentava recuperar as variáveis
select @retorno, @msg, @id_usuario;
retornavam sempre o NULL ou com os valores errados, depois de várias tentativas identifiquei que o problema esta na primeira variável se existir mas de um parmêtro de retorno como neste caso que tem 3 o primeiro sempre retornava NULL ai eu adicionei uma varíavel a mais na primeira posição como segue o exemplo:
DELIMITER //
CREATE PROCEDURE `mbc`.`UsuarioLogin`
(
in
login_entrada varchar(45),
senha_entrada varchar(45),
out
nada int,
retorno int,
msg varchar(150),
id_usuario int
)
BEGIN
declare senha_interno varchar(47);
set @nada = 1;
select idusuario, senha into @id_usuario, senha_interno from usuario where login = login_entrada;
if(senha_interno is null) then
begin
set @retorno = 1;
set @msg = 'Usuário inexistente';
set @id_usuario = 0;
end;
else
begin
if(senha_interno <> senha_entrada) then
begin
set @retorno = 2;
set @msg = 'Senha de usuario inválida';
set @id_usuario = 0;
end;
else
begin
set @retorno = 3;
set @msg = concat ('Usuário ',login_entrada,' liberado com sucesso!');
end;
end if;
end;
end if;
END//
ai com a pesquisa
select @nada, @retorno, @msg, @id_usuario;
retornou tudo na ordem com a variável @nada com o vaor NULL e as outras preenchidas corretamente, espero que ajude mas alguem, chau