oft habe ich mir schon die frage gestellt, wie der einfachste weg ist, mehrere strings, die aus einem SQL statement in mehreren rows kommen, zu einem string in einer row zusammenzufassen. im mysql gibt es die funktion group_concat(), die in oracle aber leider nicht vorkommt.
das problem im detail ist, dass das statement für ein dataset:
select
'A' as text
from
dual
union
select
'B' as text
from
dual
folgendes liefert:
text
—
A
B
…, man aber manchmal den text in einem einzigen string in einer row und nicht in mehreren rows zurückbekommen will, also “A B”
die lösung dafür ist entweder mit plsql prozeduren zu arbeiten (was ich bis jetzt immer gemacht habe) oder auf hierarchische statements zurückzugreifen. folgendes knappes statement liefert die lösung
select
ltrim(max(sys_connect_by_path(text, ' ')), ' ')
from
(
select
text,
rownum as rn
from
(
// dataset, z.b. siehe oben
)
)
start with rn = 1
connect by prior rn=rn-1
eine etwas komplexere lösung ist im tom kyte blog zu finden