Обсуждение: Why does this plpgslq always return 1?

Поиск
Список
Период
Сортировка

Why does this plpgslq always return 1?

От
"John Oakes"
Дата:
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?

От
Stephan Szabo
Дата:
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';



Re: Why does this plpgslq always return 1?

От
Jan Wieck
Дата:
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