Thread: Writing SQL functions in Postgres

Writing SQL functions in Postgres

From
Boulat Khakimov
Date:
Hi,

I want to write an SQL function in postgres that returns 
row as a result.

The problem is the select statement inside the funtion has
a two table join. So I dont know what to put after SETOF

CREATE FUNCTION dummy()
RETURNS SETOF ?????
AS 'select a.name,b.cc     from tblusers   a,        tbldocs   b    where a.name=b.name'
LANGUAGE 'SQL';     


SETOF tblusers  -- doesnt work
ERROR:  function declared to return type tblusers does not retrieve
(tblusers.*)

neither does SETOF tbldocs

SETOF tblusers,tbldocs wont work either.

Anyone was able to returns a row that is a result of few table joins
inside the
function???

Regards,
Boulat Khakimov

-- 
Nothing Like the Sun


Re: Writing SQL functions in Postgres

From
dev@archonet.com
Date:
Boulat Khakimov <boulat@inet-interactif.com> said:

> I want to write an SQL function in postgres that returns 
> row as a result.
> 
> The problem is the select statement inside the funtion has
> a two table join. So I dont know what to put after SETOF
> 
> CREATE FUNCTION dummy()
> RETURNS SETOF ?????
> AS 'select a.name,b.cc  
>     from tblusers   a,
>          tbldocs   b 
>     where a.name=b.name'
> LANGUAGE 'SQL';     
> 
> 
> SETOF tblusers  -- doesnt work
> ERROR:  function declared to return type tblusers does not retrieve
> (tblusers.*)
> 
> neither does SETOF tbldocs
> 
> SETOF tblusers,tbldocs wont work either.

There's good news and bad news.

The good news is that if you define a view "tblboth" that selects from your two tables you can then do "returns setof
tblboth".

The bad news is that your function won't return a set of records - you'll get a list of OIDs (at least I think they're
OIDs).Check the mailing archives for more on this.
 

You can do your example with a simple view, but if you want a parameterised view you'll have to wait until 7.2 (I think
it'son the todo list)
 

- Richard Huxton