Vous pouvez utiliser une sous-requête pour cela comme
select *
from
( select *
from emp
order by sal desc )
where ROWNUM <= 5;
Consultez également le sujet Sur ROWNUM et la limitation des résultats sur Oracle/AskTom pour plus d'informations.
Mettre à jour :Pour limiter le résultat avec des limites inférieures et supérieures, les choses deviennent un peu plus gonflées avec
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;
(Copié de l'article AskTom spécifié)
Mise à jour 2 :À partir d'Oracle 12c (12.1), une syntaxe est disponible pour limiter les lignes ou commencer aux décalages.
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Voir cette réponse pour plus d'exemples. Merci à Krumia pour l'indice.