Oracle JDBC выдает ORA-00933 с FETCH NEXT n ROWS ONLY - PullRequest
0 голосов
/ 03 октября 2019

Когда я запрашиваю с

SELECT EQUIP_TYPE, DESCRIP
FROM EQUIP_TYPE
ORDER BY EQUIP_TYPE

, я получаю результаты ОК. Но когда я выполняю запрос с

SELECT EQUIP_TYPE, DESCRIP
FROM EQUIP_TYPE
ORDER BY EQUIP_TYPE
FETCH NEXT 10 ROWS ONLY

, возникает SQLException:

java.sql.SQLException: ORA-00933: команда SQL неправильно завершена

Запрос: SELECT EQUIP_TYPE, DESCRIP FROM EQUIP_TYPE ORDER BY EQUIP_TYPE FETCH NEXT 10 ROWS ONLY Параметры: []

Теперь тип EQUIP_TYPE известен как уникальный, в таблице всего 367 строк.

Моя среда - Ubuntu 18.04, Java 1.8, ojdbc6-11.2.0.2.0.jar, и я работаю в контейнере Tomcat с настроенным источником данных. БД Oracle находится на удаленном хосте.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

FETCH и OFFSET введены в Oracle 12c . Их можно использовать следующим образом: в предложении OFFSET указывается количество пропускаемых строк перед ограничением строк с помощью FETCH начинает

SELECT
    EQUIP_TYPE,
    DESCRIP
FROM
    EQUIP_TYPE
ORDER BY
    EQUIP_TYPE
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

Для получения того же результата в версии Oracle до12c , Вы можете использовать аналитическую функцию ROW_NUMBER следующим образом:

SELECT
    EQUIP_TYPE,
    DESCRIP FROM
(SELECT
    EQUIP_TYPE,
    DESCRIP,
    ROW_NUMBER() OVER (ORDER BY EQUIP_TYPE) RN
FROM
    EQUIP_TYPE)
WHERE RN BETWEEN 11 AND 20;

Приветствия !!

0 голосов
/ 03 октября 2019

Возможно, вы используете версию Oracle, которая не поддерживает предложение FETCH (оно было введено только в Oracle 12c).

В качестве альтернативы вы можете использовать ROWNUM:

SELECT *
FROM (SELECT EQUIP_TYPE, DESCRIP FROM EQUIP_TYPE ORDER BY EQUIP_TYPE) x
WHERE ROWNUM <= 10
...