variable - Mailing list pgsql-general

From glextact@gmail.com
Subject variable
Date
Msg-id 6016210B-7D6F-4E59-841D-4A32C1AA9157@gmail.com
Whole thread Raw
Responses Re: variable  (Adrian Klaver <aklaver@comcast.net>)
List pgsql-general
Hi--

I'm having a bit of trouble with the EXECUTE statement for the following function. 

I saw a lot of traffic re. plpgsql & variable substitution for 8.4, but I'm convinced this is something simple (newbie):

CREATE FUNCTION topmixtot (int[]) RETURNS SETOF record AS $$
DECLARE
 gids ALIAS FOR $1;
 tmpcnt int[];
 totalcnt integer;
 row topmixtot%ROWTYPE;
BEGIN
IF (gids IS NULL) THEN
  tmpcnt := array(SELECT sum(t2.cnt) FROM inst_grant t1, topics_given_grant t2 where t1.gid=t2.gid);
ELSE
  tmpcnt := array(SELECT sum(cnt) FROM topics_given_grant WHERE gid = ANY ( gids ));
END IF;
totalcnt := tmpcnt[0];
FOR row IN EXECUTE 'SELECT topics_given_grant.tid, ( 100 * (sum(cnt) / totalcnt ))::numeric as sumcnt FROM topics_given_grant, inst_grant WHERE inst_grant.gid=topics_given_grant.gid group by topics_given_grant.tid order by sumcnt DESC' LOOP
  RETURN NEXT row;
END LOOP;
END; 
$$ LANGUAGE plpgsql;

ERROR msg.:

db=# select count(*) from topmixtot('{5}') AS foo(tid int, cnt int);
ERROR:  column "totalcnt" does not exist
LINE 1: ...SELECT topics_given_grant.tid, ( 100 * (sum(cnt) / totalcnt )...

QUERY:  SELECT topics_given_grant.tid, ( 100 * (sum(cnt) / totalcnt ))::numeric as sumcnt FROM topics_given_grant, nih_grant WHERE nih_grant.gid=topics_given_grant.gid group by topics_given_grant.tid order by sumcnt DESC
CONTEXT:  PL/pgSQL function "topmixtot" line 13 at FOR over EXECUTE statement

How do I substitute in the value for 'totalcnt' in the EXECUTE SELECT statement? 

Thanks, 

Gerry

pgsql-general by date:

Previous
From: ries van Twisk
Date:
Subject: Re: Special charaters
Next
From: Adrian Klaver
Date:
Subject: Re: variable