regexpsplit を使用したソリューションに基づく 次のクエリを実行できます。
ただし、結果の列の最大数を事前に知っておく必要があることに注意してください。
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
繰り返しになりますが、ご覧のとおり、クエリの結果の列をすべてリストする必要があります。