2

表A

Id   imge
--   ----
1    1.jpeg
2    2.jpeg
1    1.jpeg
1    1.jpeg

需要 o/p

id     image
------------
1      1.jpeg
       1.jpeg
       1.jpeg

我创建了一个函数,

create or replace function(vid in integer,vimg out varchar) returns setof record as
$$
declare
im varchar;
 begin
 select image into im from tablea wher id=$1;
 return query
 select im;
 $$
 end;
 plpgsql

但它不起作用。我需要在不使用数组和循环的情况下检索图像。

4

3 回答 3

1

我认为像这样的简单函数最好用语言sql而不是plpgsql

create or replace function func(vid in integer)
returns table(vimg varchar)
as
$$
    select imge from tablea where id=$1;
$$ language sql;

无论如何,要从函数返回多条记录,您可以返回table or setof record.

sql fiddle demo

于 2013-10-01T05:31:17.157 回答
1

您将函数声明为setof record意味着它将返回任意数量的跨行。您需要重新声明函数并更改内部选择以匹配返回类型。

或者我错了,我只是想念你正在尝试做的事情。

于 2013-10-01T05:20:53.687 回答
1

您可能正在寻找GROUP_CONCAT()

SELECT GROUP_CONCAT(imge) as images
FROM TableA GROUP BY Id;  

哦,我错过了。你在 PostgreSQL 中,对吧?不用担心。在 PostgreSQL 中有一个 group_concat 的等价物:array_agg

SELECT id, array_agg(imge)
FROM TableA GROUP BY Id;
于 2013-10-01T05:25:07.370 回答