You can use a subquery for this like
select *from ( select * from emp order by sal desc ) where ROWNUM <= 5;
Have also a look at the topic On ROWNUM and limiting results at Oracle/AskTom for more information.
Update:To limit the result with both lower and upper bounds things get a bit more bloated with
select * from ( select a.*, ROWNUM rnum from ( <your_query_goes_here, with order by> ) a where ROWNUM <= :MAX_ROW_TO_FETCH )where rnum >= :MIN_ROW_TO_FETCH;
(Copied from specified AskTom-article)
Update 2:Starting with Oracle 12c (12.1) there is a syntax available to limit rows or start at offsets.
-- only get first 10 resultsSELECT * FROM sometableORDER BY nameFETCH FIRST 10 ROWS ONLY;-- get result rows 20-30SELECT * FROM sometableORDER BY nameOFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
See this answer for more examples. Thanks to Krumia for the hint.