Jeg ved, du bruger 10 g, så det virker ikke. Men for fuldstændighedens skyld, LISTAGG()
håndterer NULL
værdier "korrekt". For det skal du dog opdatere til 11g2:
-- Nogle eksempeldata, der nogenlunde svarer til din med t as (vælg 'foo' som x fra dual union alle vælg null fra dual union alle vælg 'bar' fra dual)-- Brug listagg-aggregatfunktionen til at deltage i alle værdier, vælg listagg(x, ';') i gruppen (rækkefølge efter rækkenummer) fra t;
Eller lidt mere kortfattet, hvis du vil have en liste over kolonner fra en tabel:
-- Jeg bruger SYS.ORA_MINING_VARCHAR2_NT som en TABELTYPE. Brug din egen, hvis du foretrækker, vælg listagg(column_value, ';') i gruppen (rækkefølge efter rækkenummer) fra tabel(ORA_MINING_VARCHAR2_NT('foo', null, 'bar'));
Eller mod en faktisk tabel:
vælg listagg(column_value, ';') inden for gruppe (rækkefølge efter rækkenummer) fra Tabel1kryds-sammenføjningstabel(ORA_MINING_VARCHAR2_NT(Tabel1.a, Tabel1.b, Tabel1.c))grupper efter Tabel1.id;
Nu er jeg ikke sikker på, om dette er så meget bedre (mere læsbart) end dit originale eksempel :-)