Очень часто бывает необходимо получить из базы данных некоторое количество
строк с определенным смещением.
Например, это может понадобиться при организации постраничного просмотра некоторой информации.
Встроенных средств для этого в Oracle не предусмотрено, поэтому придется пойти немного "в обход".
Создадим таблицу test:
CREATE TABLE test (
id NUMBER PRIMARY KEY,
value VARCHAR(10) NOT NULL,
);
Добавим в нее для примера 7 записей
INSERT INTO test (id, value) VALUES (1, 'value1');
INSERT INTO test (id, value) VALUES (2, 'value2');
INSERT INTO test (id, value) VALUES (3, 'value3');
INSERT INTO test (id, value) VALUES (4, 'value4');
INSERT INTO test (id, value) VALUES (5, 'value5');
INSERT INTO test (id, value) VALUES (6, 'value6');
INSERT INTO test (id, value) VALUES (7, 'value7');
Следующий запрос позволит нам получить 3 строки начиная со второй:
SELECT id, value
FROM (SELECT ROW_NUMBER() OVER(ORDER BY id) AS rnum, id, value FROM test)
WHERE rnum > 2
AND rnum <= (2 + 3);
Результат:
ID VALUE
3 value3
4 value4
5 value4
Здесь 2 - номер строки, предшевствующей первой строке результата, 3 - количество строк, полученных в результате.
Для правильной работы данного примера, id должен быть уникален.