Zarówno dcw, jak i Dems dostarczyły odpowiednie alternatywne zapytania. Chciałem tylko dorzucić wyjaśnienie, dlaczego Twoje zapytanie nie działa tak, jak oczekiwałeś.
Jeśli masz zapytanie zawierające ROWNUM i ORDER BY, Oracle stosuje najpierw ROWNUM, a następnie ORDER BY. Więc zapytanie
SELECT *
FROM emp
WHERE rownum <= 5
ORDER BY empno
pobiera dowolne 5 wierszy z EMP
tabeli i sortuje je — prawie na pewno nie to, co było zamierzone. Jeśli chcesz uzyskać „pierwsze N” wierszy za pomocą ROWNUM, musisz zagnieździć zapytanie. To zapytanie
SELECT *
FROM (SELECT *
FROM emp
ORDER BY empno)
WHERE rownum <= 5
sortuje wiersze w tabeli EMP i zwraca pierwsze 5.