我有一个简单的查询:
select * from countries
以下是相应的结果:
country_name
------------
Albania
Andorra
Antigua
.....
我想将结果放在一行中,就像这样:
Albania, Andorra, Antigua, ...
当然,我可以编写一个PL/SQL函数来完成这项任务(我已经在Oracle 10g中完成了),但是否有更好、最好是非Oracle特定的解决方案(或内置函数)来完成此任务?通常我会使用它来避免子查询中出现多个行,因此如果一个人有多个国籍,我不希望他/她在列表中重复。
我的问题基于类似于SQL Server 2005的问题:在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;
WM_CONCAT
,因为它是未记录和不受支持的:WMSYS.WM_CONCAT不应用于客户应用程序,它是一个内部函数(文档编号1336219.1)。 - Burhan Ali