Как ограничить количество записей, возвращаемых ORACLE
запросом?
и
какой способ ты считаешь лучшим?
Как ограничить количество записей, возвращаемых ORACLE
запросом?
и
какой способ ты считаешь лучшим?
Добавьте в конец запроса «where rownum‹ = # записей ».
Начиная с Oracle 12c, вы также можете использовать fetch first row only
.
Первая строка:
select * from example fetch first row only;
Первые 10 рядов:
select * from example fetch first 10 rows only;
Однако у этого есть обратная сторона. Если вы хотите перечислить записи в порядке убывания или возрастания, вы можете просто пропустить некоторые записи. Допустим, вы ограничиваете свой возврат 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-я запись, вы можете пропустить ее с первым запросом, но второй ее заберет.
Во-первых, вы разбиваете на страницы и, таким образом, требуете ограниченного количества строк (что является допустимым ограничителем результатов)? Скорее спросите себя, не слишком ли далеко идущий ваш запрос для поставленной задачи.
Как уже упоминалось, вы можете использовать rownum
для ограничения набора результатов или обернуть rownum, как показано ниже, для примера разбивки на страницы:
Альтернативы LIMIT и OFFSET для разбиения на страницы в Oracle < / а>
Это работает для меня. Вы также можете реализовать это для разбивки на страницы.
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 - начальная позиция.