从函数中检索多个值

时间:2013-10-01 04:43:18

标签: sql postgresql

表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

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

3 个答案:

答案 0 :(得分:1)

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

或者我错了,我只是想念你要做的事。

答案 1 :(得分: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;

答案 2 :(得分: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