Язык SQL базы данных Oracle не поддерживает инструкцию limit, знакомую нам по СУБД MySQL и используемую для ограничения диапазона выдаваемых строк.
Однако требуемый функционал можно получить следующим образом (рекомендация знаменитого Тома Кайта, подробнее тут:
http://www.oracle.com/global/ru/oramag/mayjune2007/w_dev_asktom56.html):
select * from (select a.*, rownum rnum from (SQL) a where rownum <= MAX_ROW) where rnum >= MIN_ROW
где
SQL - реальный запрос,
MIN_ROW - порядковый номер записи, с которой необходимо начать вывод,
MAX_ROW - порядковый номер запроса, которым нужно закончить вывод.
Например, запрос
select * from (select a.*, rownum rnum from (select ID, TITLE from news order by DT desc) a where rownum <= 29) where rnum >= 20
вернет только новости с 20-й по 29-ю из общего списка новостей, отсортированных по убыванию даты (столбец DT).
Потребность в выполнении подобных запросов может возникнуть, например, при реализации постраничной разбивки.
Для удобства осуществления в проектах запросов с ограничениями возвращаемой выборки удобно использовать функцию, которая автоматически формирует нужный запрос. Например, такую (код на языке php):
function get_limit_sql ($sql, $min_row, $max_row)
{
return "select * from (select a.*, rownum rnum from ($sql) a where rownum <= $max_row) where rnum >= $min_row";
}
и вызывать ее всякий раз перед выполнением запроса следующим образом:
$sql = get_limit_sql ("select ID, TITLE from news order by DT desc", 20, 29);
PS.
То же самое в MySQL можно сделать запросом
select ID, TITLE from news order by DT desc limit 20,10
(начиная с 20-й 10 записей)