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

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 に答える
1

setof record関数は、任意の数の行を返すことを意味するものとして宣言しています。関数を再宣言し、内部選択を変更して戻り値の型に一致させる必要があります。

または、私は間違っていて、あなたがやろうとしていることを見逃しています.

于 2013-10-01T05:20:53.687 に答える
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 に答える