0

現在、2 つのテーブルがあります。

tblFoo
foo_id   foo_text
1        foo

tblBar
bar_id    foo_id     bar_text
100       1          hello
101       1          world

関数を使用してポリモーフィックな行の型を返そうとしています。

CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) RETURNS record as $$
DECLARE 
    rec record;
BEGIN
    SELECT
        F.foo_id,
        foo_text,
        array_agg(bar_text) as bar_text
    FROM tblFoo F
    LEFT JOIN tblBar B
    ON F.foo_id = B.foo_id
    WHERE F.foo_id = p_foo_id
    GROUP BY F.foo_id
    INTO rec;
RETURN rec;
END
$$ LANGUAGE plpgsql;

現在、これは の「fetch_foo」と呼ばれる単一の連結フィールドを返してい(1,"foo","{hello,world}")ます。Return multiple fields as a record in PostgreSQL with PL/pgSQLの返信を読み、個別のフィールドを持つレコードを返すためにここで型を作成する必要がないことを理解しました。私は何を見落としていますか?

ありがとう。

4

1 に答える 1

2

レコードを定義する必要はありません。それよりもはるかに簡単です。「戻り値テーブル」として定義し、PL/pgSQL ではなく SQL を使用するだけです。

CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) 
     RETURNS table(foo_id int, foo_text text, bar_text text[]) 
AS 
$$
   SELECT
        F.foo_id,
        foo_text,
        array_agg(bar_text) as bar_text
    FROM tblFoo F
    LEFT JOIN tblBar B
    ON F.foo_id = B.foo_id
    WHERE F.foo_id = $1
    GROUP BY F.foo_id
$$ 
LANGUAGE sql;
于 2012-07-06T14:16:35.613 に答える