Re: Result sets from functions

From: "steve boyle" <boylesa(at)dial(dot)pipex(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: Result sets from functions
Date: 2002-01-10 22:53:35
Message-ID: a1l9is$2r7p$1@news.tht.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Kevin,

AFAIK you cannot currently return resultsets from functions in Postgres. I
remember seing something ages ago that suggested it may be added at some
point but haven't seen anything since.

The docs: http://developer.postgresql.org/docs/postgres/xfunc-sql.html go
through the current usage.

The following shows how you can emulate the return of a resultset using SQL
functions and the SQL IN operator (although I don't know how efficient it
would be over large resultsets):

drop table master;
create table master (
id int4,
ma_val varchar(5),
primary key(id)
);

drop table slave;
drop sequence slave_slave_id_seq;

create table slave (
slave_id serial,
fk_id int4,
sl_val varchar(5),
foreign key (fk_id) references master(id)
);

insert into master(id, ma_val) values(1, 'a');
insert into master(id, ma_val) values(2, 'b');
insert into master(id, ma_val) values(3, 'c');

insert into slave(fk_id, sl_val) values(1, 'c1');
insert into slave(fk_id, sl_val) values(1, 'c2');
insert into slave(fk_id, sl_val) values(1, 'c3');
insert into slave(fk_id, sl_val) values(2, 'c4');
insert into slave(fk_id, sl_val) values(2, 'c5');
insert into slave(fk_id, sl_val) values(3, 'c6');

drop function f_spTest(int4);

create function f_spTest(int) returns setof int as
'select slave_id as slave_id from slave where fk_id = $1;'
language 'SQL';

select * from slave where slave_id in (select f_sptest(1));

One limitation with this is that you need to have a single key into the
table your querying (but you could probably use the OID for this so it
shouldn't be too much of a problem).

hih

sb

"Kevin Zapico" <kevin(dot)zapico(at)viewgate(dot)com> wrote in message
news:a1jiuh$2i2a$1(at)news(dot)tht(dot)net(dot)(dot)(dot)
> I am new to postgres and am trying to get a function to return a result
set
> with multiple columns.
>
> The only way I have seen to do this so far is
>
> select column1(proc()), column2(proc())
>
> This looks like it should call the proc() function twice, although I am
sure
> that it does not. However, I am trying to find out if there is another way
> of doing this.
>
> Please help.
>
>

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message SHELTON,MICHAEL (Non-HP-Boise,ex1) 2002-01-10 23:02:33 Temporary tables
Previous Message Peter T. Brown 2002-01-10 22:27:07 replication