All SQL statements are cursors. Saying "I don't want to use a cursor for my SQL query" is a bit like saying "I don't want to use a vehicle to drive my car"!
Anyway, to answer you question:
- Have a table of numbers. You could use a row generator or have a predefined table
- Join your table to this:
create table t (
id int,
mn int,
mx int
);
insert into t values (1, 5, 10);
insert into t values (2, 3, 5);
with rws as (
select rownum x from dual connect by level <= 10
)
select id, x from t
join rws r
on r.x >= mn
and r.x < mx
order by 1, 2;
ID X
---------- ----------
1 5
1 6
1 7
1 8
1 9
2 3
2 4