Em 12 de maio de 2012 18:02, Osvaldo Kussama
<[email protected]>escreveu:

>
> Para este caso em particular (uma operação aritmética) creio que
> funcionaria colocar em sua função:
> EXECUTE 'SELECT ' || parametro ||'::numeric;' INTO resultado;
>
>
Essa solução não resolve por completo expressões aritméticas.

Se a expressão for, por exemplo:

5/2+5

O resultado que irá ser apresentado com aquele SELECT dinâmico é:

bdteste=# select 5/2+5::numeric;
 ?column?
----------
        7
(1 row)

E o resultado correto seria 7,5.

Isso porque o PostgreSQL considera como inteiros os valores sem casa
decimal (com ponto ".") que não tenha sido definido explicitamente o tipo
de dado.

Para sua solução funcionar creio que não irá fugir de fazer um pequeno
parser na sua expressão aritmética e separar os seus literais e sinais para
recompor ela com os casts adequados e só assim usar o EXECUTE.

Att,

-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a