Ich habe eine einfache Frage:
select * from countries
mit den folgenden Ergebnissen:
country_name
------------
Albania
Andorra
Antigua
.....
Ich möchte die Ergebnisse in einer Zeile zurückgeben, also etwa so:
Albania, Andorra, Antigua, ...
Natürlich kann ich eine PL/SQL-Funktion schreiben, um die Aufgabe zu erledigen (das habe ich bereits in Oracle 10g getan), aber gibt es eine schönere, vorzugsweise nicht Oracle-spezifische Lösung (oder vielleicht eine integrierte Funktion) für diese Aufgabe?
Ich würde es im Allgemeinen verwenden, um mehrere Zeilen in einer Unterabfrage zu vermeiden, d. h. wenn eine Person mehr als eine Staatsangehörigkeit hat, möchte ich nicht, dass sie in der Liste doppelt vorkommt.
Meine Frage bezieht sich auf eine ähnliche Frage auf SQL-Server 2005 .
UPDATE : Meine Funktion sieht folgendermaßen aus:
CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
OPEN rec FOR sqlstr;
LOOP
FETCH rec INTO field;
EXIT WHEN rec%NOTFOUND;
ret := ret || field || sep;
END LOOP;
if length(ret) = 0 then
RETURN '';
else
RETURN substr(ret,1,length(ret)-length(sep));
end if;
end;