Re: using a function - Mailing list pgsql-general

From Filip Rembiałkowski
Subject Re: using a function
Date
Msg-id 92869e661001060045m19793753nd22e9e10a36bfafd@mail.gmail.com
Whole thread Raw
In response to using a function  (Andy Colson <andy@camavision.com>)
Responses Re: using a function  (Andy Colson <andy@squeakycode.net>)
List pgsql-general
2010/1/5 Andy Colson <andy@camavision.com>
I have a function that's working for what I needed it to do, but now I need to call it for every id in a different table... and I'm not sure what the syntax should be.

Here is an example:

create or replace function test(uid integer, out vhrs integer, out phrs integer, out fhrs integer)
returns setof record as $$
begin
 vhrs := uid + 1;
 phrs := uid + 2;
 fhrs := uid + 3;
 return next;
end;
$$ language 'plpgsql';


I currently use it once, I know the id, and just call:

select * from test(42);

all is well.


But now I need to call it for every record in my employee table.

I tried:

select id, vhrs, phrs, fhrs
from employee, test(id)

I also tried an inner join, but neither work.  Any hints how I might do this?

# select id, test(id) from ids;
 id |  test
----+---------
  1 | (2,3,4)
  2 | (3,4,5)
  3 | (4,5,6)
(3 rows)

is this what you want? if not, maybe
# select id, (select vhrs from test(id)) as vhrs, (select phrs from test(id)) as phrs, (select fhrs from test(id)) as fhrs from ids;


note: declare your function volatility - see http://www.postgresql.org/docs/8.4/static/xfunc-volatility.html
note: in above example, a VIEW would be enough.


--
Filip Rembiałkowski
JID,mailto:filip.rembialkowski@gmail.com
http://filip.rembialkowski.net/

pgsql-general by date:

Previous
From: "hx.li"
Date:
Subject: FULL JOIN is only supported with merge-joinable join conditions
Next
From: Simon Riggs
Date:
Subject: Re: PostgreSQL Write Performance