Search Postgresql Archives

variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux