簡単なクエリがあります:
select * from countries
次の結果が得られます。
country_name
------------
Albania
Andorra
Antigua
.....
結果を 1 行で返したいので、次のようにします。
Albania, Andorra, Antigua, ...
もちろん、私は仕事をするためにPL / SQL関数を書くことができます(私はすでにOracle 10gでやっていました)が、このタスクのためのより良い、できればOracle固有ではない解決策(または組み込み関数かもしれません)がありますか? ?
私は通常、サブクエリで複数の行を避けるためにそれを使用します。そのため、人が複数の市民権を持っている場合、リスト内で彼女/彼が重複することは望ましくありません。
私の質問は、 SQL server 2005に関する同様の質問に基づいています。
更新:私の関数は次のようになります:
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;