替换wm_concat

Oracle提供了COLLECT函数对列数据进行聚合,
可以使用这个函数替换wm_concat。
这种方法比较直观,容易理解。
但是需要创建另外的数据库对象以及编写PLSQL程序。用法如下:

create or replace type str_tab is table of varchar2(4000);
/


CREATE OR REPLACE FUNCTION to_string (
            nt_in        IN str_tab,
            delimiter_in IN VARCHAR2 DEFAULT ','
            ) RETURN VARCHAR2 IS


   v_str VARCHAR2(32767);
   v_dlm VARCHAR2(10);


BEGIN
   v_dlm := delimiter_in;
   for i in 1..nt_in.count loop
      v_str := v_str || v_dlm || nt_in(i);
   end loop;


   RETURN v_str;


END to_string;
/


create table idtable (id number,name varchar2(30));


insert into idtable values(10,'ab');


insert into idtable values(10,'bc');


insert into idtable values(10,'cd');


insert into idtable values(20,'hi');


insert into idtable values(20,'ij');


insert into idtable values(20,'mn');


select * from idtable;


select id,wmsys.wm_concat(name) name from idtable group by id;


select id, ltrim(to_string(cast(collect(name) as str_tab)), ',')    from idtable group by id;

你可能感兴趣的:(替换wm_concat)