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
