Re: PERFORM not working properly, please help..
От | wilczarz1@op.pl |
---|---|
Тема | Re: PERFORM not working properly, please help.. |
Дата | |
Msg-id | Q18097777-0f3d47a22d345fd3ae96b3b9ac6871d1@pmq1.m5r2.onet.test.onet.pl обсуждение исходный текст |
Ответ на | PERFORM not working properly, please help.. (wilczarz1@op.pl) |
Список | pgsql-general |
Hi Pavel, thanks for reply. Your solution: CREATE OR REPLACE FUNCTION A3() RETURNS VOID AS $BODY$ begin return query select * from A1(); return; end; $BODY$ LANGUAGE 'plpgsql'; generates error "cannot use RETURN QUERY in a non-SETOF function" because A3 returns VOID. "Pavel Stehule" <pavel.stehule@gmail.com> napisał(a): > 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 по дате отправления: