Re: Novice PL/pgSQL question and example

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Novice PL/pgSQL question and example
Дата
Msg-id 25053.1265611876@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Novice PL/pgSQL question and example  (James Long <pgsql-novice@museum.rain.com>)
Ответы Re: Novice PL/pgSQL question and example  (James Long <pgsql-novice@museum.rain.com>)
Re: Novice PL/pgSQL question and example  (James Long <pgsql-novice@museum.rain.com>)
Список pgsql-novice
James Long <pgsql-novice@museum.rain.com> writes:
> So the "calc_share" function is now declared as:

> CREATE OR REPLACE FUNCTION calc_share( cost NUMERIC, N_shares INTEGER,
>                 INOUT error_term REAL, OUT result NUMERIC ) AS $$

> -- When called N consecutive times with identical values of
> -- COST and N_SHARES, this routine will calculate N shares of a
> -- value COST and keep track of the error term, so that some shares
> -- may be one penny higher than other shares, but the sum of all the
> -- shares will always match the total COST.

> -- The caller must set error_term to 0 before the first call.

> DECLARE
>     one_share   REAL;
>     result      NUMERIC;

> BEGIN
>     one_share := cost / N_shares;
>     result := ROUND( CAST( one_share + error_term AS NUMERIC), 2 );
>     error_term := error_term + one_share - result;
> END;

Hi James,

I think your problem is that you've got a local variable "result"
masking the OUT parameter.  The assignment in the function body
assigns to that local variable, not to the OUT parameter.

BTW, you might also have some issues around having multiple versions
of calc_share() with different parameter lists --- you mentioned
having "cost" declared as both numeric and real.  You might be seeing
the thing call a different version than you were expecting.

            regards, tom lane

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Incomplete pg_dump operation
Следующее
От: peter@vfemail.net
Дата:
Сообщение: Re: Incomplete pg_dump operation