Re: select into composite type / return

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: select into composite type / return
Дата
Msg-id 3523853.1616002010@sss.pgh.pa.us
обсуждение исходный текст
Ответ на select into composite type / return  (Gary Stainburn <gary.stainburn@ringways.co.uk>)
Ответы Re: select into composite type / return  (Gary Stainburn <gary.stainburn@ringways.co.uk>)
Список pgsql-sql
Gary Stainburn <gary.stainburn@ringways.co.uk> writes:
> I have a function that takes 7 numerical inputs, performs calculations, 
> and then returns a composite type.

> create type breakdown as
>    f1    numeric(9,2),
>    f2    numeric(9,2),
>    f3    numeric(9,2),
>    f4    numeric(9,2),
>    f5    numeric(9,2),
>    f6    numeric(9,2)
> );

> create function do_breakdown(
>    v1 numeric(9,2),
>    v2 numeric(9,2),
>    v3 numeric(9,2),
>    v4 numeric(9,2),
>    v5 numeric(9,2),
>    v6 numeric(9,2),
>    v7 numeric(9,2)
> ) returns breakdown as $$
> DECLARE
>    D breakdown;
> BEGIN
>   -- calculate breakdown
>    return D;
> END;
> $$
> LANGUAGE PLPGSQL;

> This works great, returning one row with the separate columns.

> I now want to set up another function which will take a key, retrieve 
> the arguments from a table, and call the first function. The problem is 
> that I can't get the syntax correct to return the composite type.  I 
> have tried

> create function do_breakdown(key text) returns breakdown as $$
> DECLARE
>    v RECORD;
> BEGIN
>    select into v * from stored s where key s.key = key;
>    RETURN do_breakdown(v.f1,v.f2,v.f3,v.f4,v.f5,v.f6);
> END;
> $$
> LANGUAGE PLPGSQL;

> but it returns the whole thing as a single column.

AFAICS these two functions will have exactly the same output behavior,
ie returning a "breakdown" composite type.  If they act differently
for you, either you are calling them in different ways or you made
a mistake somewhere.  I can't help noticing that the RETURN in the
second function is calling a six-argument function, which is not the
one you showed first.  Maybe that version of do_breakdown() returns
something different?

            regards, tom lane



В списке pgsql-sql по дате отправления:

Предыдущее
От: Gary Stainburn
Дата:
Сообщение: select into composite type / return
Следующее
От: Gary Stainburn
Дата:
Сообщение: Re: select into composite type / return