2010-12-01 25 views
8

'daki PostgreSQL array()/array_to_string() işlevlerine eşdeğerdir Oracle'da birden çok satır döndüren bir sorgudan gelen virgülle ayrılmış bir değerler listesiyle tek bir satır döndürmeyi umuyorum. tek sıra.Oracle 9i

PostgreSQL ise

bu diziyi kullanarak ve bu gibi işlevleri array_to_string elde edilebilir:

Verilen tablo "insanları":

id | name 
--------- 
1 | bob 
2 | alice 
3 | jon 

SQL:

select array_to_string(array(select name from people), ',') as names; 

döndürür:

names 
------------- 
bob,alice,jon 

Aynı sonucu Oracle 9i'de nasıl elde edebilirim?

sayesinde

Matt

+0

Yardımınız için teşekkürler, biraz daha araştırma yaptım ve bu cevabın benim için hile yaptığını fark ettim: http://stackoverflow.com/questions/468990/how-can-i-combine-multiple- satır-içine-bir-virgül-ayrılmış-list-in-oracle/4027064 # 4027064 – walkermatt

cevap

5

Tim Hall string aggregation techniques in Oracle kesin bir koleksiyona sahiptir. Eğer 9i kalıyorsanız

, benim kişisel tercihi,

SELECT string_agg(name) 
    FROM people 

olurdu (o sayfadaki string_agg bir uygulama vardır) özel bir agrega tanımlamak için böyle olurdu Ama tanımlamak zorunda yeni bir STRING_AGG işlevi. Yeni nesneler oluşturmaktan kaçınmanız gerekiyorsa, başka yaklaşımlar vardır, ancak 9i'de PostgreSQL sözdiziminden daha karmaşık olacaklardır.

+0

+ 1 ve işaretçi için teşekkürler. Bay Hall'ın sitesinde bir sürü şey var! – DCookie

1

10g'de, Tim'in makalesinin sonunda belirtilen COLLECT seçeneğini kesinlikle tercih ederim. Ancak

SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp 
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept 

9i var:

o yaklaşımının iyi aynı temel işlevi (yani bağımsız değişken olarak toplanmasını kabul eder), agrega olarak ve bir multiset fonksiyonu olarak hem de kullanılabilir olmasıdır müsait değil. SYS_CONNECT_BY_PATH güzel çünkü esnek, ancak yavaş olabilir, bu yüzden dikkatli olun.