none
Procedure com Retorno RRS feed

  • Pergunta

  • Bom dia
    Eu sei que eu deveria pesquisar antes pois tenho certeza que essa duvida existe no forum mas alguma coisa está acontecendo com a pesquisa que não retorna nada.
    E estou precisando urgente

    Eu fiz a seguinte procedure para validar o login só que ela não retorna nenhum valor. Debugando a execução entra no laço set @retorno = 3;  e acreditava que ele deveria retornar 3.
    Desculpe mas eu estava trabalhando com Oracle e estou totalmente perdida.


    O que estou fazendo de errado?

     
    */  
    ALTER    PROCEDURE sp_ValidaLogin  
            (   @login varchar (10),  
                @senha varchar (30),  
                @retorno int output)  
     
    AS   
    BEGIN 
        Declare @valida int 
          
     
        -- 0 validação com sucesso  
        -- 1 Usuário não existe  
        -- 2 Usuário desativado  
        -- 3 Usuário logado  
     
        --valida se usuário existe  
        select @valida = count(*) from usuario_sistema usuario  
                                            where usuario.st_login = @login;  
     
            --se o usuário existir verifica se está ativo     
            if @valida = 1  
                    begin 
                            select @valida = count(*) from usuario_sistema usuario  
                                                                where usuario.st_login = @login  
                                                                and usuario.nm_usu_ativo = 1;  
          
            --se o usuário estiver ativo verifica se não está logado  
                        if @valida = 1  
                            begin 
                                select @valida = count(*) from usuario_sistema usuario  
                                                                    where usuario.st_login = @login  
                                                                    and usuario.nm_usu_ativo = 1  
                                                                    and usuario.nm_logado = 1;  
                                    --se o usuário estiver ativo verifica se não está logadp  
                                                if @valida = 1  
                                                begin 
                                                        select @retorno = count(*) from usuario_sistema usuario, historico_senha historico   
                                                                        where usuario.st_login = @login   
                                                                        and historico.st_senha = @senha  
                                                                        and historico.nm_seq_senha = 0  
                                                                        and usuario.id_usuario = historico.id_usuario;  
                                                end 
                                                else   
                                                begin 
                                                        set @retorno = 3;  
                                                end 
                                end               
                        else 
                        begin 
                                set @retorno = 2;  
                        end 
            end 
            else 
            begin 
                        set @retorno = 1;  
            end 
    end 


    end

     
    sexta-feira, 6 de fevereiro de 2009 17:01

Respostas

  • Boa Tarde,

    Primeiramente eu recomendo que você certifique-se de que as tabelas realmente possuem os dados necessários para que as consultas atendam aos critérios estipulados. Posteriormente, para evitar novas avaliações de IF e ELSE, após a instrução SET, coloque uma instrução RETURN para que a procedure finalize.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiarl.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:07
    sexta-feira, 6 de fevereiro de 2009 17:14
  • Olá Heloisa,

    A idéia de colocar o RETURN sozinho é apenas para que a execução da SP tenha de ser interrompida, evitando que ela continue processando. Se você quiser pode usar o RETURN @valida para verificar o valor de retorno, mas se você está debugando, poderá ver o valor a partir da variável.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:07
    sexta-feira, 6 de fevereiro de 2009 17:46
  • Sim tem dados para validar a minha procedure.
    Eu fiz um teste debugando coloquei um

    CREATE  PROCEDURE sp_ValidaLogin  
            (   @login varchar (10),  
                @senha varchar (30),  
                @retorno int output)  
     
    AS   
    BEGIN 
        Declare @valida int 
          
            -- 0 validação com sucesso  
        -- 1 Usuário não existe  
        -- 2 Usuário desativado  
        -- 3 Usuário logado  
     
        --valida se usuário existe  
        select @valida = count(*) from usuario_sistema usuario  
                                            where usuario.st_login = @login;  
        set @retorno = 20; return 
     Ele retornou mas a resposta do queryanalyser foi

    @RETURN_VALUE = 0

    O que está acontecendo?
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:08
    sexta-feira, 6 de fevereiro de 2009 17:41

Todas as Respostas

  • Boa Tarde,

    Primeiramente eu recomendo que você certifique-se de que as tabelas realmente possuem os dados necessários para que as consultas atendam aos critérios estipulados. Posteriormente, para evitar novas avaliações de IF e ELSE, após a instrução SET, coloque uma instrução RETURN para que a procedure finalize.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiarl.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:07
    sexta-feira, 6 de fevereiro de 2009 17:14
  • Sim tem dados para validar a minha procedure.
    Eu fiz um teste debugando coloquei um

    CREATE  PROCEDURE sp_ValidaLogin  
            (   @login varchar (10),  
                @senha varchar (30),  
                @retorno int output)  
     
    AS   
    BEGIN 
        Declare @valida int 
          
            -- 0 validação com sucesso  
        -- 1 Usuário não existe  
        -- 2 Usuário desativado  
        -- 3 Usuário logado  
     
        --valida se usuário existe  
        select @valida = count(*) from usuario_sistema usuario  
                                            where usuario.st_login = @login;  
        set @retorno = 20; return 
     Ele retornou mas a resposta do queryanalyser foi

    @RETURN_VALUE = 0

    O que está acontecendo?
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:08
    sexta-feira, 6 de fevereiro de 2009 17:41
  • Olá Heloisa,

    A idéia de colocar o RETURN sozinho é apenas para que a execução da SP tenha de ser interrompida, evitando que ela continue processando. Se você quiser pode usar o RETURN @valida para verificar o valor de retorno, mas se você está debugando, poderá ver o valor a partir da variável.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Heloisa Reis sexta-feira, 6 de fevereiro de 2009 18:07
    sexta-feira, 6 de fevereiro de 2009 17:46
  • Era isso que falta.
    Set @return = 1;
    Return @return

    Obrigada
    sexta-feira, 6 de fevereiro de 2009 18:07
  • Heloisa disse:

    Era isso que falta.
    Set @return = 1;
    Return @return

    Obrigada



    sexta-feira, 6 de fevereiro de 2009 18:08
  • Oi Heloisa,

    Veja se ísto te ajuda !

    Declare @Login varchar(10),
        @Senha varchar(30),
        @retorno int

    -- Alimente as variáveis cf. exemplo
    Set @Login = 'jose'
    Set @Senha = '123'

    Exec sp_ValidaLogin @Login, @Senha, @retorno OUTPUT

    Select @retorno
    ou
    Set @variavel = @retorno
    ou
    if (@retorno = 1) faça ...

    Você deve ler o retorno direto na váriável de (OUTPUT)

    espero ter ajudado !!!

    Henrique


    Consultor .Net
    sexta-feira, 6 de fevereiro de 2009 19:15