Thread: its posible to use a 2 column returning function as a subquery?

its posible to use a 2 column returning function as a subquery?

From
Gerardo Herzig
Date:
Hi All. My poor english doest not allow me to get a better subject.
Here is the thing: I have a function who returns a two column result,
that is is used inside another function, like this

CREATE FUNCTION show_result((some args), OUT shoe varchar, OUT desc
varchar , OUT price numeric)
...
as
$$
select shoe,
(get_desc_and_price(shoe)).desc,
(get_desc_and_price(shoe)).price
from ...
$$ language sql;

This is the only way i get this thing working. According to the timming,
it looks like get_desc_and_price() is being called twice. There is some
syntax for calling get_desc_and_price only once?
As getting the 'description' and the 'price' share most of the logic, itlooks ok to write a single function that does
thejob.
 

Thanks!
Gerardo


Re: its posible to use a 2 column returning function as a subquery?

From
Tom Lane
Date:
Gerardo Herzig <gherzig@fmed.uba.ar> writes:
> There is some syntax for calling get_desc_and_price only once?

Do something like

select (t).* from (select get_desc_and_price(shoe) as t from ...) ss;

If you don't have get_desc_and_price marked as volatile, you'll probably
also need to add "offset 0" to the sub-select to keep the planner from
flattening the sub-select and producing multiple calls of the function.
        regards, tom lane