Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Tratamento de exceção em procedimento com funções aninhadas em pl/sql


O RAISE_APPLICATION_ERROR procedimento tem um terceiro parâmetro que controla se a exceção substitui a pilha de exceção atual (o comportamento padrão) ou adiciona a ela.

Então, se você passar TRUE ele mostrará ambas as mensagens; na chamada do seu procedimento:
...
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data',
  TRUE);
END;

dá a saída:
BEGIN
*
ERROR at line 1:
ORA-20101: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 13
ORA-20102: Circle Code is wrong or not available
ORA-06512: at line 2

Para mostrar apenas as mensagens e não as outras informações da pilha, você precisaria manipular a pilha. Este artigo aborda como usar format_error_backtrace para extrair as informações de seu interesse, mas infelizmente o link para o BT pacote está morto. Alguns dos mesmos motivos está coberto aqui . Essencialmente, você precisa analisar a string de exceção em linhas e exibir apenas aquelas que começam com ORA-20% , Eu penso.

Mas tome cuidado para não perder informações que podem realmente ser vitais. Em particular, sugiro que você apenas capture os erros específicos que está procurando, não OUTROS - deixe isso de lado para que você possa lidar com erros inesperados e não esconda algo importante.