Selamlar,
 
İstediğiniz çıktıyı verecek olan SQL sorgusu aşağıdaki şekilde;
 
select ed.id, ed.master_id, ed.evrak_no, array_agg(syer.yer_adi) from tbl_detay ed left join tbl_std_yer syer on syer.id=any(ed.yer_id_array) group by ed.id, ed.master_id, ed.evrak_no;
 
Bu çıktıyı daha önce iletmiş olduğunuz fonksiyon örneği içerisine yerleştirir isek;
 
create or replace function sp_list_abc(in sp_mastter_id integer, out sp_id bigint, out sp_evrakno text, out sp_yer_adi_array text[])
returns setof record language sql as
$body$
select ed.id, ed.evrak_no, array_agg(syer.yer_adi) from tbl_detay ed left join tbl_std_yer syer on syer.id=any(ed.yer_id_array) where ed.master_id=$1 group by ed.id, ed.master_id, ed.evrak_no;
$body$;
 
Kullanım örneği de aşağıdaki gibi;
 
postgres=# select * from sp_list_abc(1);
 sp_id | sp_evrakno | sp_yer_adi_array
-------+------------+------------------
     3 | yyy5       | {Denizli,İzmir}
     2 | abcd78     | {İzmir}
(2 rows)

postgres=# select * from sp_list_abc(12);
 sp_id | sp_evrakno |    sp_yer_adi_array     
-------+------------+-------------------------
     1 | 12ilerd    | {İzmir,İstanbul,Ankara}
(1 row)
 
 
İyi çalışmalar.
Samed YILDIRIM
 
 
 
27.11.2018, 21:03, "Java Notlarım" <javanotlarim@gmail.com>:

Merhaba, öncelikle ilginiz ve yardımınız için çok teşekkür ederim.  
Can Bey; ARRAY_AGG kullandığımda "array_agg(text, unknown) fonksiyonu mevcut değildir" uyarısı aldım.

Samed bey; Postgresql 10 versiyonunu kullanıyorum. Tablolarım ve örnek verileri excel tablosundan kopyalayıp yapıştırdım, umarım mail içeriğinde sorun olmaz.

 

tbl_detay
İd – bigintmaster_id – integerevrak_no – textyer_id_array - smallint []
11212ilerd{3,2,4}
21abcd78{2,5}
31yyy5{1.2}
 
 
tbl_std_yer
İd – integeryer_adi - text
1Denizli
2İzmir
3İstanbul
4Ankara
Function sonucu istenilen
İd – bigintmaster_id – integerevrak_no – textyer_adlari
11212ilerd{İstanbul,İzmir,Denizli}
21abcd78{İzmir,Bursa}
31yyy5{Denizli.İzmir}
 
Samed YILDIRIM <samed@reddoc.net>, 27 Kas 2018 Sal, 19:11 tarihinde şunu yazdı:
Merhabalar,
 
Tabloların (tbl_detay ve tbl_std_yer) kolon yapılarını (create cümlecikleri de olur), birkaç satırlık örnek veri ve kullandığınız PostgreSQL versiyonunu da ekler misiniz.
 
İyi çalışmalar.
Samed YILDIRIM
 
 
 
27.11.2018, 19:56, "Java Notlarım" <javanotlarim@gmail.com>:
Merhaba. 
Tablomda smallint array tipinde bir alanım mevcut. Bu alandaki verileri çekerken, smallint değerleri yerine, bu smallint değerlerin string karşılıkları ile çekmek için, JOIN kullanarak bir sorgu yazdım. Bu sorgu normalde sorunsuz çalışırken, sorguyu function (Stored Procedure) olarak yazmaya çalıştığımda 
 
"ERROR: HATA: record dönüşlü bildirilmiş işlevde return deyimin tipi uyumsuz AYRINTI: Son ifade 3 sütununda text[] yerine text döndürüyor."
şeklinde bir hata alıyorum. Aldığım hata ile ilgili çözüm öneriniz olursa çok memnun olurum.
Functionum aşağıdaki gibi
 
CREATE OR REPLACE FUNCTION sp_list_abc(
IN sp_master_id integer,
OUT sp_id bigint,
OUT sp_evrakno text,
OUT sp_yer_adi_array text[])
    RETURNS SETOF record 
    LANGUAGE 'sql'
 
    COST 100
    VOLATILE 
   
AS $BODY$
 
select ed.id, ed.evrak_no,STRING_AGG(syer.yer_adi, ', ') 
from tbl_detay ed
LEFT JOIN tbl_std_yer syer on syer.id=ANY(ed.yer_id_array)
where ed.master_id=$1 
GROUP BY ed.id, syer.yer_adi
 
$BODY$;