समाधान के आधार पर regexp split आप निम्न क्वेरी चला सकते हैं।
हालांकि, ध्यान दें कि आपको परिणामी स्तंभों की अधिकतम संख्या पहले से पता होनी चाहिए।
with t1 as (select 1 rn, 'Orcl, orcl, linux box, Pass, tablespace_name1, tablespace_name2' col from dual union all
select 2 rn, 'Orcl2, orcl2, linux box2, Pass2, tablespace_name12, tablespace_name22' col from dual),
t2 as (select rownum colnum from dual connect by level <= 6 /* (max) number of columns */)
select t1.rn, t2.colnum, rtrim(ltrim(regexp_substr(t1.col,'[^,]+', 1, t2.colnum))) col from t1, t2
where regexp_substr(t1.col, '[^,]+', 1, t2.colnum) is not null
order by rn,colnum;
यह आपको पंक्ति, स्तंभ और मुख्य दृश्य देता है:
RN COLNUM COL
----- ---------- ------------------
1 1 Orcl
1 2 orcl
1 3 linux box
1 4 Pass
1 5 tablespace_name1
1 6 tablespace_name2
2 1 Orcl2
2 2 orcl2
2 3 linux box2
2 4 Pass2
2 5 tablespace_name12
2 6 tablespace_name22
परिणाम को समतल तालिका में प्राप्त करने के लिए आप PIVOT क्वेरी का उपयोग कर सकते हैं
with t1 as (select 1 rn, 'Orcl, orcl, linux box, Pass, tablespace_name1, tablespace_name2' col from dual union all
select 2 rn, 'Orcl2, orcl2, linux box2, Pass2, tablespace_name12, tablespace_name22' col from dual),
t2 as (select rownum colnum from dual connect by level <= 6 /* (max) number of columns */),
t3 as (select t1.rn, t2.colnum, rtrim(ltrim(regexp_substr(t1.col,'[^,]+', 1, t2.colnum))) col from t1, t2
where regexp_substr(t1.col, '[^,]+', 1, t2.colnum) is not null)
select * from t3
PIVOT (max(col) col for (colnum) in
(1 as "1",
2 as "2",
3 as "3",
4 as "4",
5 as "5",
6 as "6"))
order by rn;
RN 1_COL 2_COL 3_COL 4_COL 5_COL 6_COL
----- --------- --------- --------- --------- --------- ---------
1 Orcl orcl linux box Pass tablespace_name1 tablespace_name2
2 Orcl2 orcl2 linux box2Pass2 tablespace_name12 tablespace_name22
फिर से, जैसा कि आप देख रहे हैं, आपको क्वेरी में सभी परिणामी स्तंभों को सूचीबद्ध करना होगा।