Em 21 de abril de 2014 13:59, André Geraldo dos Santos <
[email protected]> escreveu:

> Caros
> Boa tarde.
>
> Estava em busca de uma função para operação ternária e encontrei o exemplo
> abaixo no link a seguir
> http://postgresql.1045698.n5.nabble.com/Operador-quot-quot-td2044065.html
>
> create or replace function fc_iif(boolean, anyelement, anyelement) returns
> anyelement as
> $$
>   select case when $1 is true then $2 else $3 end;
> $$
> language 'sql';
>
> Exemplo de uso: select fc_iif( (tipopessoa='F'), 'FISICA', 'JURIDICA' )
> from pessoa
>
> Ao testar a função com o exemplo sugerido pelo autor, recebo a mensagem
> "Nenhuma função corresponde com o nome e os tipos de argumentos informados.
> Você precisa adicionar conversões de tipo explícitas."
>
> Estou utilizando a versão 9.3 do PG e ainda não consegui entender porque
> do não funcionamento com tipos polimórficos.
>
> O Post é de 2009 e talvez na época o PG permitia esse tipo de função, fato
> é que a função é bem simples e a utilização da mesma deixa o sql mais
> legível.
>
> Aguardo possíveis considerações dos colegas.
>

A versão deveria ser abaixo da 8.3, onde todos os tipos eram convertidos de
qualquer coisa pra qualquer coisa e zas..
Tente desta forma, definindo um tipo para os seus parâmetros:

"select fc_iif((tipopessoa='F'), 'FISICA'::varchar, 'JURIDICA'::varchar)
from pessoa "

Assim provavelmente irá funcionar.

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

Responder a