Why does this plpgslq always return 1?
Why does this plpgslq always return 1?
От:
"John Oakes" <john@networkproductions.net>
Дата:
Can anyone tell me why this always return 1? Thanks! CREATE FUNCTION passrate(date, date, text) RETURNS float AS ' DECLAREbegindate ALIAS FOR $1;enddate ALIAS FOR $2;passfail ALIAS FOR $3; ret float;countp float;counttotal float; BEGIN SELECT INTO countp COUNT(*)FROM benchmarkWHERE passfail = passfail; SELECT INTO counttotal COUNT(*)FROM benchmark; ret := countp / counttotal;RETURN ret; END;' LANGUAGE 'plpgsql'; John
Re: Why does this plpgslq always return 1?
От:
Jan Wieck <JanWieck@Yahoo.com>
Дата:
Stephan Szabo wrote: > On Fri, 27 Jul 2001, John Oakes wrote: > > > Can anyone tell me why this always return 1? Thanks! > > > > CREATE FUNCTION passrate(date, date, text) RETURNS float AS ' > > > > DECLARE > > begindate ALIAS FOR $1; > > enddate ALIAS FOR $2; > > passfail ALIAS FOR $3; > > ret float; > > countp float; > > counttotal float; > > > > > > BEGIN > > > > SELECT INTO countp COUNT(*) > > FROM benchmark > > WHERE passfail = passfail; > > Ehhh? Were you expecting that to substitue > for *one* of those passfails and not the > other? ;) > > Rename the alias variable to something else. > > > > > SELECT INTO counttotal COUNT(*) > > FROM benchmark; > > > > ret := countp / counttotal; And check for zero before doing a division, as a transaction abort is usually not exactly what you want. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com # _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
Re: Why does this plpgslq always return 1?
От:
Stephan Szabo <sszabo@megazone23.bigpanda.com>
Дата:
On Fri, 27 Jul 2001, John Oakes wrote: > Can anyone tell me why this always return 1? Thanks! > > CREATE FUNCTION passrate(date, date, text) RETURNS float AS ' > > DECLARE > begindate ALIAS FOR $1; > enddate ALIAS FOR $2; > passfail ALIAS FOR $3; > ret float; > countp float; > counttotal float; > > > BEGIN > > SELECT INTO countp COUNT(*) > FROM benchmark > WHERE passfail = passfail; Ehhh? Were you expecting that to substitue for *one* of those passfails and not the other? ;) Rename the alias variable to something else. > > SELECT INTO counttotal COUNT(*) > FROM benchmark; > > ret := countp / counttotal; > RETURN ret; > END;' > LANGUAGE 'plpgsql';