Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #103283
    Avatar de brunog3brunog3
    Participante

      boa tarde pessoal,

      como faço para suprimir a exceção no data found em um select into?
      Preciso recuperar o código do registro mais antigo e status 2, porém quando não existir devo considerar a data de atualização.
      Quando o primeiro teste falha está lançando a exceção no data found e não executa o restante da procedure.

      exemplo:


      ....

      select * into vcodigo from (
      select nvl(min(codigo), 0) into vcodigo from cliente
      where status = 2
      order by data_cadastro asc;
      )
      where rownum = 1;

      if (vcodigo = 0) then
      select * into vcodigo from (
      select nvl(min(codigo), 0) into vcodigo from cliente
      order by data_atualizacao asc;
      )
      where rownum = 1;
      end if;

      ....

      #103286
      Avatar de Manoel872Manoel872
      Participante

        @brunog3

        Joga o select entre um begin e exception e trata a excessao!

        Begin

        Select

        Exception whe NO_DATA_FOUND THEN

        end;

        Att,

        Manoel Jr.

        #103287
        Avatar de brunog3brunog3
        Participante

          Obrigado @Manoel872.
          Eu havia criado outras duas funções só pra tratar a exceção nelas
          mas não sabia que podia declarar o bloco begin exception end;
          dentro da própria função;

          O modo de recuperação do registro mais recente está correto?

          select * into vcodigo from (
          select nvl(min(codigo), 0) into vcodigo from cliente
          where status = 2
          order by data_cadastro asc;
          )
          where rownum = 1;

          Tentei fazer num select só com um “min” e order by mas não funcionou.

          #103288
          Avatar de Manoel872Manoel872
          Participante

            @brunog3

            Cara nao entendo o porque do order by sendo que você esta pegando o min! Tenta explicar o que extamente vc quer para que possa apoia-lo.

            Seguinte se for para pegar alguma informação de um registro mais antigo faz um subselect pegando o min.

            Select * from tabela
            where pk = (select min(pk) from tabela where valida = 2)

            Att,

            Manoel Jr,

            #103290
            Avatar de brunog3brunog3
            Participante

              O exemplo anterior ficou incorreto.


              select * into vcodigo from (
              select nvl(codigo, 0) into vcodigo from cliente
              where status = 2
              order by data_cadastro asc;
              )
              where rownum = 1;

              Eu preciso do código do registro mais antigo.
              Eu preciso do min ou do rownum = 1 pra assegurar que o resultado seja apenas um registro.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress