Запрос с лимитом записей - ошибка: ORA-00933: SQL command not properly ended
Уже как только не пробовал запросы с лимитом, но получаю ошибки:
SELECT * FROM TABLE OFFSET 10 ROWS
SQLSTATE[HY000]: General error: 933 OCIStmtExecute: ORA-00933: SQL command not properly ended
БД: Oracle 10g
Ранее работал с версиями старше 10g, проблем вообще не было.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
OFFSET, а также FETCH, появились в 12c Release 1 (12.1.0.1) см. row_limiting_clause.
Попробуйте классический запрос для пагинации:
create table tab (id, memo) as
select level, 'memo '||level from dual connect by level<=100
/
select id, memo from (
select q.*, rownum rn from (
select *
from tab
order by id
) q where rownum <= 11
) where rn >= 9
/
ID MEMO
---------- --------
9 memo 9
10 memo 10
11 memo 11
Или запрос покороче с аналитической функцией, он даст тот же результат:
select id, memo from (
select tab.*, row_number() over (order by id) rn
from tab)
where rn between 9 and 11
Важно: запрос в вопросе имеет ещё один недостаток, без ORDER BY его результат не детерминирован, то есть, сегодня он выведет: 1,2,3, а завтра: 2,3,1.