Re: Function problem

From: Enrico <scotty(at)linuxtime(dot)it>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Function problem
Date: 2008-02-22 17:19:08
Message-ID: 20080222181908.448ed6f1.scotty@linuxtime.it
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Fri, 22 Feb 2008 11:51:01 -0500
Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Enrico <scotty(at)linuxtime(dot)it> writes:
> > the first record has valore=98 and totale=0 for the first time of
> > the loop, but my first result of totale is -298 instead of +98.
>
> Hmm, that's a bit hard to believe.

Yes you right, it's hard to believe for me too :)

> Could we see the whole example
> not just a fragment?

This is my code :
-------------------------------------------------------------------------------------------------------------
CREATE TYPE my_inv AS
(codice_art character(15),
codice_agg character(20),
descr character varying(60),
gruppo smallint,
giacenza numeric(20,5),
prezzo_lis numeric(20,5),
prezzo numeric(20,5),
valore numeric(20,5),
totale numeric (20,5));

ALTER TYPE my_inv OWNER TO postgres;

CREATE OR REPLACE FUNCTION calcolo_inventario(bpchar, date, bpchar)
RETURNS SETOF my_inv AS
$BODY$
DECLARE
minv my_inv;
r record;
flag int4;
tot numeric(20,5);
valore numeric(20,5);

BEGIN

create temp table tminv (
codice_art char(13),
codice_agg char(20),
descr char(60),
gruppo int4,
giacenza numeric(20,5),
prezzo_lis numeric(20,5),
prezzo numeric(20,5)
);


insert into tminv (codice_art,descr,gruppo,giacenza,prezzo_lis,prezzo)
select distinct S.codice_art, A.descr,A.gruppo,A.giacenza,L.prezzo as
prezzo_lis,avg(S.importo) as prezzo from scrittura_magazzino S inner
join anag_art A on (S.codice_art=A.codice_art) left join ean13 E on
(S.codice_art=E.codice_art) inner join listini L on
(s.codice_art=L.codice_art) where S.c_s='C'
and L.listino = $1
and data_doc <= $2
group by 1,2,3,4,5;

update tminv
set codice_agg = CA.codice_agg
from codici_aggiuntivi CA
where tminv.codice_art = CA.codice_art
and CA.tipo_cod = $3;

tot := 0;
for r in select * from tminv loop
minv.codice_art := r.codice_art;
minv.codice_agg := r.codice_agg;
minv.descr := r.descr;
minv.gruppo := r.gruppo;
minv.giacenza := r.giacenza;
minv.prezzo_lis := r.prezzo_lis;
minv.prezzo := r.prezzo;
valore := r.prezzo*r.giacenza;
minv.valore := valore;

tot := tot+valore;
minv.totale := tot;
return next minv;
end loop;
return;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

-----------------------------------------------------------------------
There is then another question if I write

[....]

for r in select * from tminv loop
tot := 0;
[....]

the result is correct, but if I want to sum the results with

[........]
tot := 0;
for r in select * from tminv loop
[........]
the result is not correct

Thanks for your time :)

Enrico

--
One small feel for man, one giant ass for mankind (Dr. Gregory House)

Enrico Pirozzi
Web: http://www.enricopirozzi.info
E-Mail: info(at)enricopirozzi(dot)info
Skype: sscotty71

In response to

Browse pgsql-general by date

  From Date Subject
Next Message LARC/J.L.Shipman/jshipman 2008-02-22 18:24:53 reindexing
Previous Message brian 2008-02-22 17:10:00 Re: Function problem