Sending function parametars within EXECUTE ''SELECT...

From: Mario Splivalo <mario(dot)splivalo(at)mobart(dot)hr>
To: pgsql-sql(at)postgresql(dot)org
Subject: Sending function parametars within EXECUTE ''SELECT...
Date: 2005-09-28 16:51:09
Message-ID: 1127926269.16100.3.camel@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I've learned that one can't use temporary tables within the function
unless
EXECUTE'd the SELECTS from that temp table.

So, I have a function like this:

CREATE FUNCTION Foo1(int4, int4) RETURNS SETOF myType
AS
'
DECLARE
aDataId ALIAS FOR $1;
aBid ALIAS FOR $2;
return myType;
rec record;
BEGIN
CREATE TEMP TABLE tmpTbl
AS
SELECT col1, col2 FROM t1 JOIN t2 ON t1.c1 = t2.c3 WHERE t1.c4 =
aDataId;

FOR rec IN EXECUTE ''SELECT COUNT(col1) AS num FROM tmpTbl WHERE
col2 = aBid''
LOOP
return.myType = rec.num;
END LOOP;

RETURN NEXT return;
RETURN;
END
' language 'pgplsql'

Now, when I try to call that function, i get an error that aBid is
unknown
column name. How can I pass the aBid value to the SELECT statement
inside
the EXECUTE?

I'm using temp table because the tables from where to gather the data
are
huge. If I'd be using views instead, it'd take too much time. I tought
that
storing only a small fraction of the data (1/1000 of the data is put
into
the temp table), and then performing calculations on that temp table
would
be much faster. I just don't know how to pass parameters to the EXECUTE
SELECT.

Any help here would be appreciated.

Mike

P.S. I tried above code on pg8.0.3 and 8.1beta2, with same results.

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message codeWarrior 2005-09-28 17:01:23 Re: Sending function parametars within EXECUTE ''SELECT...
Previous Message codeWarrior 2005-09-28 16:24:24 Re: Why doesn't the SERIAL data type automatically have a UNIQUE CONSTRAINT