O ORA-01403 é o código de "nenhum dado encontrado". Em leitura de cursor, ele marca só o fim normal dos dados. Por isso o relatório o separa dos outros erros e, quando ele é o único código do trace, mostra um achado só informativo.
Sintomas
No Diagnóstico, aparece o achado n ORA-01403 (fim de dados) (FIM_DE_DADOS), com o texto Normal em laços de leitura. e o link Ver erros. A severidade é informação, sem percentual do tempo total.
O achado aparece só quando o ORA-01403 é o único código de erro do trace. Se há outro código, aparece no lugar o achado de erros Oracle no trace, cuja contagem deixa o 1403 de fora. As ocorrências de ORA-01403 continuam listadas na seção Erros nos dois casos.
Causa
O cartão do código, na seção Erros, resume as duas origens:
- Em
select ... intono PL/SQL, a consulta não devolveu linha, e o PL/SQL levanta a exceçãoNO_DATA_FOUND. - Em
fetchde cursor, é só o fim normal dos dados: em laços de leitura, aparece uma vez por cursor percorrido.
Resolução
Na maior parte das vezes, não há o que corrigir. Para conferir:
- Clique em Ver erros.
- No cartão do ORA-01403, veja em Onde apareceu a Chamada, o Comando, a Prof. e as Ocorrências de cada local.
Resultado: você sabe qual comando gera o código e quantas vezes.
- Compare as ocorrências com as execuções do comando, em Chamadas no detalhe dele.
Vale agir em três casos:
- Muitas ocorrências vindas de um
select ... intoque pesa no tempo: o código testa a existência linha a linha e usa a exceção para controlar o fluxo. Troque por um SQL que trate o conjunto, com junção,existsoumerge(linha a linha em PL/SQL). - A linha devia existir, como um cadastro que falta ou uma chave errada: o erro é sinal de dado inconsistente. Confira o dado que o comando procura.
- O PL/SQL esconde o erro com
when others then null: o mesmo bloco esconde também os outros erros. Trate oNO_DATA_FOUNDpelo nome.
Como confirmar
Se você mudou o código, gere o trace da mesma operação e compare as ocorrências do ORA-01403 em Erros e a coluna Inclusivo (s) do comando que o gerava, em Comandos SQL por contribuição. Com o laço trocado por um SQL de conjunto, os dois caem.
No relatório
O relatório de exemplo não tem erros, e a seção Erros só aparece quando o trace tem algum.
- Erros: o cartão do ORA-01403, com O que é, Quando aparece, O que fazer e Onde apareceu (erros).
- Diagnóstico: o achado e o link Ver erros (Diagnóstico).
- Detalhe do comando: o quadro Erros e a tabela Chamadas, com as execuções do comando (detalhe do comando).
- Comandos SQL por contribuição: o tempo inclusivo do comando que gera o código (comandos SQL).