Em 12/05/12, Fabrízio de Royes Mello<[email protected]> escreveu:
> 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.
>


Concordo.
Talvez devesse ter escrito "uma operação aritmética simples" como o
exemplificado.
Não sei quais são as reais necessidades do Anselmo, pode ser que esta
solução simples atenda.

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

Responder a