Em 24 de novembro de 2015 11:56, Danilo Silva <danilo.dsg.go...@gmail.com>
escreveu:

>
>
> Em 24 de novembro de 2015 11:50, Flavio Henrique Araque Gurgel <
> fha...@gmail.com> escreveu:
>
>> Pessoal,
>>>
>>> Dentro de uma função que retorna uma trigger, é possível efetuar um
>>> insert antes de um raise exception?
>>>
>>> Por exemplo
>>>
>>> IF condicao THEN
>>> INSERT tabela_log...
>>> RAISE EXCEPTION '';
>>> RETURN NULL;
>>> END IF;
>>> RETURN NEW;
>>>
>>> A intenção é gravar em uma tabela de log a tentativa de insert.
>>>
>>
>> Quando você faz o RAISE EXCEPTION o que você faz é justamente... uma
>> exceção. Logo, um rollback é feito obrigatoriamente.
>>
>> Para fazer o que você quer, tem que tratar a exceção, um bloco assim no
>> fim da função pode te ajudar:
>> EXCEPTION
>>     WHEN unique_violation THEN
>>         INSERT INTO tabela_log... ;
>>         RETURN outro_valor;
>>     END;
>>
>> Lembre-se de tratar seu RETURN na chamada da função, porque você *não*
>> terá tratamento do rollback de outros comandos numa mesma transação, neste
>> caso.
>>
>
​Fiz um teste conforme indicado, mas a dúvida pairou sobre o RETURN pois
como é para trigger, então o return da chamada da função​

​é um TRIGGER​, então minha função ficou assim:
EXCEPTION WHEN OTHERS THEN
INSERT INTO tabela_log...;
RETURN NULL;
END;

Até aqui beleza, mas a questão é que preciso mostrar a exceção na tela
da aplicação, pois do jeito que fiz e mostrei aqui, quando faço o insert, a
aplicação entende que a instrução deu certo (apesar de retornar 0 linhas
afetadas, porém sem erros).

[]s
Danilo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a