Do you have any comments about this implementation (10.2+)?  Do you
know of better ways to do this?  Does this one have any major issues
in your opinion?
Thanks, Joel
(PS -Sorry about the extra PM on this one David.  Tried to reply to
the old message but hit wrong reply button accidentally.)

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

create or replace function split_string (p_string in varchar2)
   return split_type
as
   l_data   split_type := split_type ();
   cursor c_list
   is
      select  trim (both ' ' from regexp_substr (str, '[^,]+', 1,
level)) as single_element
            from (select p_string str from dual)
      connect by instr (str, ',', 1, level - 1) > 0;
begin
   for list_rec in c_list
   loop
      l_data.extend;
      l_data (l_data.count) := list_rec.single_element;
   end loop;
   return l_data;
end;

create table t (id number, value varchar2(255));
insert into t values (1,'one,two,three');
insert into t values (2,'four, five, six');
insert into t values (3,'seven,eight, nine ');
commit;

select * from t;

select t1.id, t2.column_value num
  from  (select id, get_test_table (value) v from t) t1 natural join
table (t1.v) t2;

drop table t purge;



>On Dec 13, 9:03 am, Joel <[email protected]>  wrote:
>
>> There are new functions pivot, unpivot, and listagg.  Any idea how to
>> unlistagg?
>
>Not without parsing the output with, say, instr().  The listagg
>function is intended to generate report output, imo, not to generate
>data for loading elsewhere.
>
>David Fitzjarrell

-- 
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en

Reply via email to