argument type problem with plpgsql function

Поиск
Список
Период
Сортировка
От Luca Pireddu
Тема argument type problem with plpgsql function
Дата
Msg-id 200511221708.10563.luca@cs.ualberta.ca
обсуждение исходный текст
Ответы Re: argument type problem with plpgsql function  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Список pgsql-sql
I wrote a little function that has to work with big numbers

CREATE OR REPLACE FUNCTION blast_evalue(seq_len bigint, db_size bigint, 
bit_score double precision) RETURNS double precision AS $$
BEGIN RETURN 2^(bit_score) * db_size * seq_len;
END;
$$
LANGUAGE 'plpgsql'
IMMUTABLE
RETURNS NULL ON NULL INPUT;

but it doesn't work properly unless I cast the db_size parameter when I call 
the function:

select blast_evalue(273, 8903836, -55.4546);blast_evalue
--------------  2430747228  <- wrong number.  This is 273 * 8903836 
(1 row)

select blast_evalue(273, 8903836::bigint, -55.4546);   blast_evalue
---------------------4.9231356421437e-08 <- that's correct
(1 row)

I don't understand why the cast is necessary.  Is there a way to make this 
work without it? 

Thanks

Luca


В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: unplanned sub-select error?
Следующее
От: Stephan Szabo
Дата:
Сообщение: Re: argument type problem with plpgsql function