Hello 2010/2/18 <wilczarz1@xxxxx>: > 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.. > -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general