выберите диапазон строк из таблицы - PullRequest
0 голосов
/ 11 июля 2011

У меня есть таблица XYZ (идентификатор первичного ключа, имя). В таблице более 10000 строк. Я хочу обрабатывать 1000 строк за раз. Для этого мне нужно сначала 1000 строк из таблицы, а затем обновить таблицу в соответствии с результатами. Для первых 1000 строк я могу получить, используя

   select *  from XYZ where rownum >=1 and rownum <= 1000

но для следующих 1000 строк я не знаю, как написать запрос, потому что если я напишу

select count(*)  from XYZ where rownum >=1000 and rownum < 2000

запрос дает 0 строк. Не знаю, как написать запрос. Пожалуйста, помогите. Я использую базу данных Oracle 11g.

1 Ответ

3 голосов
/ 11 июля 2011

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

Чтобы получить результаты, которые вы действительно хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...