11g を使用しているため、再帰サブクエリ ファクタリングを使用してこれを実現できます。
with t as (
select 11 as x from dual
union all
select 222 as x from dual
),
r (x, idx, len) as (
select x, 1, length(x)
from t
union all
select r.x, r.idx + 1, r.len
from r
where r.idx < r.len
)
select x from r
order by x;
X
-----
11
11
222
222
222
アンカー メンバーは、元の行と値の長さを取得します。再帰メンバーはidx
、長さに達するまで 1 を追加します。
SQLフィドル。
階層クエリでも実行できます。
with t as (
select 11 as x from dual
union all
select 222 as x from dual
)
select x
from t
connect by level <= length(x)
and prior x = x
and prior sys_guid() is not null;
2 つの句の組み合わせprior
- 1 つは重複を制限し、もう 1 つはそれを行うときに循環を防ぐために非決定論的関数を含む - 目的の行を提供します。
X
-----
11
11
222
222
222
SQLフィドル。