Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #94244
    daniels
    Participante

      Prezados,

      Tenho a seguinte query:


      declare
      d_voucher mp_voucher.voucher_id%TYPE;
      d_status VARCHAR(50);
      BEGIN
      select v.voucher_id
      into d_voucher
      from uadmin.mp_voucher v
      where v.voucher_id in (&VOUCHER);

      IF d_voucher is not null then
      d_status := d_voucher || ',Utilizado';
      ELSE
      RAISE e_voucher;
      end if;

      EXCEPTION
      WHEN NO_DATA_FOUND THEN
      BEGIN
      d_status := &VOUCHER || ',Não Utilizado';
      END;

      DBMS_OUTPUT.PUT_LINE(D_STATUS);
      end;

      Preciso pegar os vouchers utilizados. Se eu jogo um número que foi utilizado, ele tem q me retornar o número do voucher e a msg “Utilizado”, caso contrário, o número do voucher e a msg “Não Utilizado”.
      Ocorre que qdo ele não foi utilizado, ele não existe na tabela, então o oracle me retorna o erro “NO DATA FOUND”. Por isso, usei o exception. Acontece q qdo coloco o exception no mesmo bloco, ele ignora o IF, ou seja, mesmo q eu coloque um número válido, nada acontece. Se eu retiro o trecho do exception e jogo um número válido, o if responde perfeitamente, porém, sem o exception, se entrar um número não utilizado, ele retorna o “NO DATA FOUND”.
      Eu empaquei nisso, alguém pode me dar uma dica?

      #94245
      Ishii
      Participante

        Olá,

        O problema é que o exception está no bloco Begin – End. Se você quiser que ele passe pelo IF-ENDIF deve colocar outro bloco dentro do IF e do ELSE, porém o no_data_found se refere a primeira query que já não retorna nada…. reveja sua lógica antes de colocar o exception…

        []s Ishii

        #94248
        daniels
        Participante

          Valeu pela luz Ishii, matei o problema.

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