sql - Why does the wm_concat not work here? -
i have query :
(select object_id cr_object_group_entries_vw object_group_id in (select item table(cr_fn_split_string('28,56',',')))) that returns :

but when :
select wm_concat(object_id) (select object_id cr_object_group_entries_vw object_group_id in (select item table(cr_fn_split_string('28,56',',')))) i blank result... doing wrong?
you must avoid wm_concat function because undocumented , discovered workaround @ oracle 8i times.
since times of old method custom aggregate function discovered tom kyte here there new workarounds, showed @ examples below.
all of them reproduced in this sql fiddle.
workaround 1 - listagg function, works in 11g:
select listagg(object_id,',') within group (order rownum) id_string cr_object_group_entries_vw workaround 2 - sys_connect_by_path, works since 10g:
select id_string ( select rn, substr(sys_connect_by_path(object_id, ','),2) id_string (select object_id, rownum rn cr_object_group_entries_vw) start rn = 1 connect prior rn + 1 = rn order rn desc ) rownum = 1 workaround 3 - xmlagg, works since 10g:
select replace( replace( replace( xmlagg(xmlelement("x",object_id)).getstringval(), '</x><x>', ',' ), '<x>', '' ), '</x>', '' ) id_string cr_object_group_entries_vw p.s. didn't know in oracle versions sys_connect_by_path , xmlagg introduced, both works on 10.2.0.4.0
Comments
Post a Comment