Получить указанное количество строк в Oracle 11g - PullRequest
2 голосов
/ 02 сентября 2011

Я хочу получить количество строк в SQL. Я использую

select ROWNUM,FULL_NAME
from OSQS_INSTITUTION
order by FULL_NAME
WHERE rownum BETWEEN 10 AND 20

и попробуйте это

select ROWNUM,FULL_NAME
from OSQS_INSTITUTION
order by FULL_NAME limit 10,20

и оба возвращают одну и ту же ошибку

Команда SQL неправильно завершена

EDIT:

    StringBuilder sqlStatement = new StringBuilder();
    sqlStatement.append("SELECT USER_NO,FULL_NAME,ACTIVE from");
    sqlStatement.append("(");
    sqlStatement.append(" SELECT USER_NO,FULL_NAME,ACTIVE, ROW_NUMBER() OVER(ORDER BY full_name) rn");
    sqlStatement.append("FROM osqs_institution");
    sqlStatement.append(")WHERE rn BETWEEN ? AND ? ");

    PreparedStatement pstmt = null;
    pstmt = con.prepareStatement(sqlStatement.toString());
    pstmt.setInt(1, from);
    pstmt.setInt(2, to);
    rs = pstmt.executeQuery();

с необходимой попыткой поймать.

1 Ответ

3 голосов
/ 02 сентября 2011

В первой версии вашего запроса вы указали предложение WHERE после ORDER BY, что синтаксически неверно.

Вторая версия работает в MySQL, но не в Oracle.

В любом случае вы не можете получить какие-либо строки, когда используете его между.

Вместо этого попробуйте это:

WITH qry AS
(
    SELECT full_name, ROW_NUMBER() OVER(ORDER BY full_name) rn
        FROM osqs_institution
)
SELECT rn, full_name
  FROM qry
WHERE rn BETWEEN 10 AND 20 

Если вы не хотите использовать функцию ROW_NUMBER, попробуйте следующее:

SELECT rn, full_name
  FROM
(
    SELECT full_name, ROWNUM AS rn 
        FROM (SELECT * FROM osqs_institution ORDER BY full_name)
)
WHERE  rn BETWEEN 10 AND 20 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...