On Wed, May 30, 2012 at 11:21 AM, Pavel Stehule <pavel.steh...@gmail.com>wrote:
> Hello > > create or replace function call_foo() > returns void as $$ > declare r record; > begin > r := foo('Hello'); > raise notice ''% %', r.somerow, r.otherinfo; > end; > $$ language plpgsql; > It turns out i also need to define a type for the result record of `foo`, because record can't reveal the structure of the result (it complains: record "r" has no field "somerow"). I have to created this type: create type foo_result as (somerow SomeTable, otherinfo varchar); then change `r record;` to `r foo_result;` , no need change `foo` itself, and it works now. I don't know is this the best way to do this though. > > regards > > Pavel > > 2012/5/30 yi huang <yi.codepla...@gmail.com>: > > I'm porting a oracle function to postgresql, which has signature like > this: > > > > FUNCTION foo > > ( seq IN varchar > > , somerow OUT SomeTable > > , otherinfo OUT varchar > > ) > > > > It's easy to port this function itself to postgresql, but i have problem > to > > execute this function and assign the results into variables: > > > > SELECT (foo(seq)).* INTO (v_somerow, v_otherinfo); > > > > It complains v_somerow can not be row type. > > > > How to handle the result of function foo? > > > > Best regards. > > YiHuang. > -- http://yi-programmer.com/