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