LISTAGG Analystic Function Etiketli Yazılar

Oracle – LISTAGG Analystic Function

LISTAGG fonksiyonu, 11gR2 ile gelen yeni bir fonksiyondur.

Kullanımı: LISTAGG(kolonadi,ayraç)

Anlatımımızı örnekle yapalım;
Şu şekilde bir tablomuz olduğunu varsayalım;

Depertman        Personel
Muhasebe           Fikret
Muhasebe           Ceyda
Satınalma            Turan
Satınalma            Emel

Her depertman satırının karşısında kişileri listelemek isteyelim,

Depertman          Personel
Muhasebe            Fikret,Ceyda
Satınalma             Turan,Emel

bu tip bir listelemeyi LISTAGG fonksiyonu kullanarak yapabiliriz.

Select Depertman, LISTAGG(Personel,',') as "Personeller" from tblSicil Group by Depertman

Daha önce kullandığımız ve aynı işi yapan WM_CONCAT ile arasındaki farklar ise şunlardır.

1-WM_CONCAT Oracle tarafından dökümante edilmemiştir, yani desteklenmez.LISTAGG ise Oracle tarafından desteklenen bir fonksiyondur.

2-WM_CONCAT, distinct kullanımına izin verir, LISTAGG ile kullanamazsınız.

select wm_concat(distinct sehir) as sehirler from Ulkeler;

3-LISTAGG ayrılmış dizelerin kendi içinde order ına izin verir, WM_CONCAT de yapılamaz.

select listagg(sehir,',') within group(order by sehirID desc) as sehirler from Ulkeler;

4-LISTAGG ayraç olarak birden fazla karakter kullanımına izin verir, WM_CONCAT buna izin vermez.

select listagg(sehir,'***') within group(order by sehirID desc) as sehirler from Ulkeler;

5-WM_CONCAT keep kullanımına izin verir, LISTAGG izin vermez.

select wm_concat(sehir) keep(dense_rank first order by sehirID ) as sehirler from Ulkeler;

6-WM_CONCAT olap da order by kullanımına izin verir, LISTAGG izin vermez.LISTAGG order by haricinde OLAP da desteklenir.

select deptno,wm_concat(sehir) over(order by sehirID ) as enames from Ulkeler;