#sql #oracle #sql-order-by #offset #sql-limit
#sql #Oracle #sql-order-by #смещение #sql-limit
Вопрос:
Я получаю сообщение об ошибке:
Ошибка ORA-00933: команда SQL завершилась неправильно
Когда я запускаю следующий запрос ORACLE:
Select "col1", "col2"
from SCHEMANAME.TABLENAME
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY
Какие-либо решения?
Комментарии:
1. Вам не хватает двойной кавычки в
select
. Если это является причиной вашей проблемы, это просто опечатка.
Ответ №1:
Я предполагаю, что вы используете Oracle < 12.2, где fetch
предложение недоступно.
Типичный обходной путь использует оконные функции:
select col1, col2
from (
select t.*, row_number() over(order by id) rn
from schemaname.tablename t
) t
where rn between 101 and 200;
Обратите внимание, что для получения стабильного результата как вашего исходного запроса, так и этого запроса вам нужен столбец, который детерминированно определяет порядок строк. Я предположил id
.
Если вам нужна нестабильная сортировка, которую я бы не рекомендовал, используйте order by null
в over()
предложении of row_number()
.