Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabiapo

Como gravar exceções em tabelas de logs?

Recommended Posts

Pessoal,

 

Estou desenvolvendo funções para gravação de dados em tabelas. Porém, gostaria de logar em uma tabela de logs caso ocorram erros durante a execução.

 

Como posso fazer isto e gravar a mensagem do postgre numa tabela?

 

Sei que existe a constante EXCEPTION que deveremos incluir na function, mas como pegar o erro e gravar sem especificidade do tipo de erro?

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao final da procedure, antes do end, faça:

 

EXCEPTION
WHEN OTHERS THEN
MSG := 'SQL ERROR  ' || SQLERRM || ' - ERROR OF SQL => ' || SQLSTATE;
INSERT MSG INTO <TABLE>
END;

Com o others, ele capturará toda e qualquer exceção.

 

Lembrando que uma stored procedure com tratamento de exceção é um pouco mais lenta do que uma sem tratamento. Se não quiser perder performance, mude o conf do postgres pra logar erros no arquivo de logs do servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo,

 

Há como mensurar esta perca de performance em porcentagem?

 

 

 

 

Ao final da procedure, antes do end, faça:

 

EXCEPTION
WHEN OTHERS THEN
MSG := 'SQL ERROR  ' || SQLERRM || ' - ERROR OF SQL => ' || SQLSTATE;
INSERT MSG INTO <TABLE>
END;

Com o others, ele capturará toda e qualquer exceção.

 

Lembrando que uma stored procedure com tratamento de exceção é um pouco mais lenta do que uma sem tratamento. Se não quiser perder performance, mude o conf do postgres pra logar erros no arquivo de logs do servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei dizer de quanto é exatamente a perda. Só usando fazendo benchmarks com e sem.

 

Segue link do manual do postgres http://www.postgresql.org/docs/8.0/static/...structures.html

 

Segue fragmento do manual sobre exceção:

 

Tip: A block containing an EXCEPTION clause is significantly more expensive to enter and exit than a block without one. Therefore, don't use EXCEPTION without need.

Depois do tamanho da stored procedure e talz, talvez seja apenas de milésimos de segundo. Acredito que só deve impactar na sua aplicação se ela for de grande porte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.