Re: PERFORM not working properly, please help.. - Mailing list pgsql-general

From Pavel Stehule
Subject Re: PERFORM not working properly, please help..
Date
Msg-id 162867791002181141y4d91142by2ce54d71502d3312@mail.gmail.com
Whole thread Raw
In response to PERFORM not working properly, please help..  (wilczarz1@op.pl)
List pgsql-general
Hello

2010/2/18  <wilczarz1@op.pl>:
> I have a function A1 that returns setof records, and I use it in two ways:
> 1) from function A2, where I need results from A1
> 2) from function A3, where I don't need these results, all I need is to
> execute logic from A1
>
> Here ale very simple versions of my functions:
>
> CREATE OR REPLACE FUNCTION A1() RETURNS setof record AS $BODY$
> begin
>  -- some logic here
>  return query select col from tab;
> end;
> $BODY$ LANGUAGE 'plpgsql';
>
> CREATE OR REPLACE FUNCTION A2() RETURNS setof record AS $BODY$
> begin
>  -- some logic here
>  return query select * from A1() as dummy ( x double precision);
> end;
> $BODY$ LANGUAGE 'plpgsql';
>
> CREATE OR REPLACE FUNCTION A3() RETURNS VOID AS $BODY$
> begin
>  perform A1();
> end;
> $BODY$ LANGUAGE 'plpgsql';
>
> And here are my function calls:
> select * from A1() as(x double precision) --ok
> select * from A2() as(x double precision) --ok
> select * from A3(); --not ok, argh!
>

it is correct. Every function has own stack for result. There are not
some global stack. Perform just run function and doesn't copy inner
result's stack to outer result stack.

your A3 function have to be
begin
  return query select * from a1
  return;
end;

like a2 function

regards
Pavel Stehule
> The last one generates error "set-valued function called in context that
> cannot accept a set". Why doesn't PERFORM work here? Thanks for help..
>

pgsql-general by date:

Previous
From: wilczarz1@op.pl
Date:
Subject: PERFORM not working properly, please help..
Next
From: Raymond O'Donnell
Date:
Subject: Re: PERFORM not working properly, please help..