J'ai une question simple :
select * from countries
avec les résultats suivants :
country_name
------------
Albania
Andorra
Antigua
.....
Je voudrais renvoyer les résultats en une seule ligne, comme ceci :
Albania, Andorra, Antigua, ...
Bien sûr, je peux écrire une fonction PL/SQL pour faire ce travail (je l'ai déjà fait dans Oracle 10g), mais existe-t-il une solution plus agréable, de préférence non spécifique à Oracle (ou peut-être une fonction intégrée) pour cette tâche ?
Je l'utilise généralement pour éviter les rangs multiples dans une sous-requête. Ainsi, si une personne a plus d'une nationalité, je ne veux pas qu'elle figure en double dans la liste.
Ma question est basée sur la question similaire posée sur SQL server 2005 .
UPDATE : Ma fonction ressemble à ceci :
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;