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 |