Как ограничить количество записей, возвращаемых запросом ORACLE?

Как ограничить количество записей, возвращаемых ORACLE запросом?

и

какой способ ты считаешь лучшим?


person user471011    schedule 21.12.2010    source источник
comment
stackoverflow .com / questions / 2912144 /.   -  person a'r    schedule 21.12.2010
comment
первая ссылка на странице, которую вы мне даете - не работает   -  person user471011    schedule 21.12.2010
comment
возможный дубликат Ограничение возвращаемой записи из запроса SQL в Oracle   -  person Bob Jarvis - Reinstate Monica    schedule 22.12.2010


Ответы (5)


Добавьте в конец запроса «where rownum‹ = # записей ».

person Community    schedule 21.12.2010
comment
Это правильно, но вы должны быть уверены, что заказ сделан до оценки rownum. В любом случае отличный ответ уже был предоставлен в комментарии: stackoverflow.com/questions/486452/ - person andr; 22.12.2010

Начиная с Oracle 12c, вы также можете использовать fetch first row only.

Первая строка:

select * from example fetch first row only;

Первые 10 рядов:

select * from example fetch first 10 rows only;
person Peter    schedule 19.11.2014

Однако у этого есть обратная сторона. Если вы хотите перечислить записи в порядке убывания или возрастания, вы можете просто пропустить некоторые записи. Допустим, вы ограничиваете свой возврат 8 строками, тогда запрос берет первые 8 вхождений и перечисляет их в порядке сортировки.

Следующий запрос захватит первые 8 записей в таблице, которые соответствуют вашим критериям, и отсортирует их в вашем порядке. например.

select 
    order, order_date, booked_out_date 
from 
    orderdb
where 
    booked_out_date is not null 
    and rownum <= 8 
order by 
    booked_out_date;

Следующий запрос сначала захватит все записи, соответствующие моим критериям, отсортирует их, а затем отобразит первые восемь зарезервированных заказов в порядке дат.

Select * 
From
    (Select 
         order, order_date, booked_out_date 
     From 
         orderdb
     Where 
          booked_out_date is not null 
     Order By date)
Where 
    rownum <= 8;

Если заказы, которые были зарезервированы, попадают в первые восемь заказов, но их запись в таблице равна ie. 20-я запись, вы можете пропустить ее с первым запросом, но второй ее заберет.

person Wouter    schedule 09.05.2012

Во-первых, вы разбиваете на страницы и, таким образом, требуете ограниченного количества строк (что является допустимым ограничителем результатов)? Скорее спросите себя, не слишком ли далеко идущий ваш запрос для поставленной задачи.

Как уже упоминалось, вы можете использовать rownum для ограничения набора результатов или обернуть rownum, как показано ниже, для примера разбивки на страницы:

Альтернативы LIMIT и OFFSET для разбиения на страницы в Oracle < / а>

person Jé Queue    schedule 21.12.2010

Это работает для меня. Вы также можете реализовать это для разбивки на страницы.

SELECT
    *
FROM
    (
        SELECT
            inner_query.*,
            ROWNUM rnum
        FROM
            (
                SELECT
                    *
                FROM
                    table_name
                ORDER BY column_name
            ) inner_query
        WHERE
            ROWNUM <= 20
    )
WHERE
    rnum >= 1;

где rownum - нет. записей, а rnum - начальная позиция.

person Mukesh Rai    schedule 22.05.2017