Hi,
This seems to be a favorite approach (from obfuscation contests) :
with
rd as (
select 1 p, 0 pp, 4000 v from dual union all
select 2, 1, 4000 from dual union all
select 3, 2, 4000 from dual union all
select 4, 3, 4000 from dual union all
select 5, 4, 4000 from dual union all
select 6, 5, 4000 from dual union all
select 7, 6, 4000 from dual union all
select 8, 7, 4000 from dual union all
select 9, 8, 4000 from dual),
rd1(p, v) AS (
select p, TO_CLOB(RPAD('X', v, 'X')) v
from rd
where pp = 0
union all
select rd2.p, TO_CLOB(RPAD('X', rd2.v, 'X')) || rd1.v v
from rd rd2, rd1
where rd2.pp = rd1.p)
select p, v, length(v) lv
from rd1
Should work for integers between 1 and 4000. There may be some slow-down eventually ;)