これを行うにはかなり複雑な方法しかありません。これは、Oracleにとって本当に苦痛です。 LIMIT/OFFSET句を実装するだけです...
行番号は後に割り当てられます 行はwhere句によって選択されているため、rownumは常に1で始まる必要があります。where rownum > x
常にfalseと評価されます。
また、rownumは並べ替えが行われる前に割り当てられます。 、したがって、rownumはあなたの注文と同じ順序にはなりません。
副選択で両方の問題を回避できます:
select a,b,c, rn from
( select a,b,c, rownum rn from
( select a,b,c from the_table where x = ? order by c)
where rownum < Y)
where rn > X
並べ替える必要がない場合(ただし、その場合のみ)、次のように簡略化できます
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X