You could have ordering problems so I would Write your query in an inline view and then wrap that in a rownum so that you can get ranges. The query may look a little messy but should execute OK.
for example
select ....
from (select col1, col2, ... rownum row_num
from (select col1, col2...
from tab1, tab2 ...
where tab1.a = tab2.b
and other_conditions_here
order by some_column) ilv
) ilv2
where row_num between x and y