Re: Table functions say "no destination for result data."

Поиск
Список
Период
Сортировка
От Fernando Papa
Тема Re: Table functions say "no destination for result data."
Дата
Msg-id CB94A4924490EC4A81EDA55BA378B7BA7B8504@exch2k01.buehuergo.corp.claxson.com
обсуждение исходный текст
Ответ на Table functions say "no destination for result data."  ("Fernando Papa" <fpapa@claxson.com>)
Список pgsql-general
Hi Stephan!
I read your comments:

> If you want to return multiple rows you want
> RETURNS SETOF public.vw_match

I don't know why pgAdmin doesn't show RETURNS SETOF... I put it, but
when I try to see DDL on pgAdmn I see without "SETOF"... maybe a bug?

> for r in select ... loop
>  return next r;
> end loop;


I put this thing (it's really a new concept... I'm coming from oracle
and I never seen things like that) on function.

I make a very simple version of these function just for familiarize
about the way to do this:


CREATE FUNCTION public.match_tf(int8) RETURNS SETOF public.vw_matcheo AS
'
DECLARE
   vid ALIAS FOR $1;
   vcursor refcursor;
   r record;
BEGIN

for r in select
pp.participante,par.nick,pp.sexo,pp.edad,pp.pais,pp.descripcionbreve
                     from perfilespropios pp,
                             participantes par
                     where par.identificador = pp.participante
                     limit 5
loop
return next r;
end loop;

return;

END;
'  LANGUAGE 'plpgsql'


And I get another error this time:

2002-12-09 12:04:40 ERROR:  Set-valued function called in context that
cannot accept a set
2002-12-09 12:04:40 WARNING:  Error occurred while executing PL/pgSQL
function match_tf
2002-12-09 12:04:40 WARNING:  line 31 at return next


I called the function:
contenedor=# select match_tf(132);
WARNING:  Error occurred while executing PL/pgSQL function match_tf
WARNING:  line 13 at return next
ERROR:  Set-valued function called in context that cannot accept a set


could be the problem the view?

Thanks a lot!

--
Fernando O. Papa


> -----Mensaje original-----
> De: Stephan Szabo [mailto:sszabo@megazone23.bigpanda.com]
> Enviado el: viernes, 06 de diciembre de 2002 18:20
> Para: Fernando Papa
> CC: pgsql-general@postgresql.org
> Asunto: Re: [GENERAL] Table functions say "no destination for
> result data."
>
>
>
> On Fri, 6 Dec 2002, Fernando Papa wrote:
>
> >
> > Hi everybody!
> >
> > I'mt playing with new table functions on a fresh postgresql
> 7.3 over
> > Solaris... I want a function who return several rows, so I define
> > that:
> >
> > -- Function: public.matcheo_cupido_tf(int8)
> > CREATE FUNCTION public.match_tf(int8) RETURNS public.vw_match AS '
>
> If you want to return multiple rows you want
> RETURNS SETOF public.vw_match
>
> > DECLARE
> >    vid ALIAS FOR $1;
> >    result int8;
> >    vnick varchar;
> >    vsex varchar;
> >    vdesde int8;
> >    vhasta int8;
> (add another local, see below)
>      r record;
>
> > BEGIN
> >
> > select into vnick,vsex,vdesde,vhasta
> >        par.nick,par.sexo,pb.edaddesde,pb.edadhasta,pb.pais
> > from participantes par,
> >      perfilesbusqueda pb
> > where par.identificador = vid and
> >       pb.participante = par.identificador;
> >
>
>
> > select pp.participante,par.nick,pp.sex,pp.edad,pp.desc
> > from perfilespropios pp,
> >      participantes par
> > where pp.sex <> vsex and
> >       pp.edad >= vdesde and
> >       pp.edad <= vhasta and
> >       par.identificador = pp.participante
> > ;
>
> You want something like:
>
> for r in select ... loop
>  return next r;
> end loop;
>
> return;
>
> I believe.
>
>

В списке pgsql-general по дате отправления:

Предыдущее
От: "Henrik Steffen"
Дата:
Сообщение: Re: pg 7.3 memory error / Kernel BUG
Следующее
От: "Fernando Papa"
Дата:
Сообщение: Re: Table functions say "no destination for result data."