Запрос с лимитом записей - ошибка: 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.

→ Ссылка