1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
create table t_data
(
nsq number(19,0) primary key,
txt varchar2(4000 char)
);
/
insert all
into t_data (nsq, txt) values(1 ,'t1;t2;t3;t4;t5')
into t_data (nsq, txt) values(2, 't6;t7;t8;t9;t10')
into t_data (nsq, txt) values(3, 't11;t12;t13;t14;t15')
into t_data (nsq, txt) values(4, 't16;t17;t18;t19;t20')
select 1 from dual ;
commit ;
/
create or replace type result_obj as object (
nsq number(19,0),
idx number(10,0),
colname varchar2(32 char),
val varchar2(256 char)
);
/
create type result_obj_t as table of result_obj ;
/
create or replace function prepare_result_4pivot
return result_obj_t
pipelined as
cnt number(10,0) := 1 ;
begin
for rec in (
select * from t_data
)
loop
cnt := 1 ;
for subrec in (
select subs from json_table(
replace( json_array(
replace(rec.txt,';' , ',')
), ',', '","')
,
'$[*]' columns (
subs varchar2(4000) path '$'
)
)
)
loop
pipe row( result_obj( rec.nsq, cnt, 'Field' || cnt, subrec.subs ) ) ;
cnt := cnt + 1 ;
end loop ;
end loop ;
end prepare_result_4pivot ;
/
select * from (select nsq, colname, val from table(prepare_result_4pivot) order by nsq, idx )
pivot (
max(val) for colname in ('Field1','Field2','Field3','Field4','Field5')
)
; |
Partager