0

我目前有两张桌子:

tblFoo
foo_id   foo_text
1        foo

tblBar
bar_id    foo_id     bar_text
100       1          hello
101       1          world

我正在尝试使用一个函数返回一个多态行类型,a la:

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}")。我已阅读使用 PL/pgSQL 在 PostgreSQL 中将多个字段作为记录返回的回复,并了解我不需要在这里创建类型来返回具有单独字段的记录。我在看什么?

谢谢。

4

1 回答 1

2

您不需要定义记录。它比这简单得多,只需将其定义为“返回表”并使用 SQL 而不是 PL/pgSQL。

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 回答