rownum
не является реальным столбцом, это псевдоколонка, которая генерируется по мере того, как генерируются строки, начиная с 1 и считая вверх.
Итак, ваш запрос: select * from XYZ where rownum >= 1000 and rownum <= 2000
Не возвращает строк.Зачем?Oracle генерирует первую строку и присваивает ей значение rownum, равное 1. Затем проверяется, должно ли оно быть включено в набор результатов.Rownum <1000, поэтому нет.Он переходит к следующей строке и использует следующий по величине еще не использованный rownum ... который по-прежнему равен 1. Повторите до конца таблицы. </p>
Вам необходимо ввести подвыбор, чтобы преобразовать rownum
вреальный столбец:
select * from
(select rownum r, * from xyz) inner
where
inner.r >= 1000 and inner.r <= 2000
Чтобы получить результаты, которые вы действительно хотите.