При работе с Oracle 12 c и реализации нумерации страниц я столкнулся с проблемой при использовании ORDER BY
в сочетании с OFFSET
и FETCH NEXT <X> ROWS ONLY
.
Пример
Моя таблица тестирования test
:
+----+---------------------+
| ID | NAME |
+----+---------------------+
| 1 | Customer Support |
| 2 | Property Management |
| 3 | Security |
| 4 | Security |
| 5 | Security |
| 6 | Security |
| 7 | Tax Compliance |
+----+---------------------+
Я выполняю следующие действия: SQL:
SELECT id
FROM test
ORDER BY name ASC
OFFSET <offset> ROWS
FETCH NEXT 1 ROWS ONLY;
С этими результатами:
+--------+--------+-----------------+
| Offset | Result | Expected result |
+--------+--------+-----------------+
| 0 | 1 | 1 |
| 1 | 2 | 2 |
| 2 | 3 | 3 |
| 3 | 4 | 4 |
| 4 | 4 | 5 |
| 5 | 4 | 6 |
| 6 | 7 | 7 |
+--------+--------+-----------------+
Вопрос
Вопрос в том, почему БД не возвращает ожидаемый результат?
Когда не используется ORDER BY
, он работает безупречно. Этот вид использования запрещен? Я использую это неправильно? Если да, то не могли бы вы указать мне документацию, в которой говорится, что такого рода использование невозможно. Я использую версию 12 c, но то же самое относится и к 19 c.
Дополнительные примеры запросов
Запрос только с OFFSET
:
SELECT id
FROM test
ORDER BY name ASC
OFFSET 4 ROWS;
Результат:
+----+
| ID |
+----+
| 5 |
| 6 |
| 7 |
+----+
Запрос с OFFSET
и FETCH NEXT 1 ROWS ONLY
:
SELECT id
FROM test
ORDER BY name ASC
OFFSET 4 ROWS
FETCH NEXT 1 ROWS ONLY;
Результат:
+----+
| ID |
+----+
| 4 |
+----+
Спасибо
Адам