Oracle tilldelar värden till ROWNUM sekventiellt allteftersom rader produceras av frågan - alltså får den första raden som hämtas ROWNUM=1, den andra raden som hämtas får ROWNUM=2, den tredje raden som hämtas får ROWNUM=3, etc. Observera - för en rad för att tilldelas ROWNUM=3 MÅSTE två föregående rader hämtas. Och det är därför din fråga inte returnerar några rader. Du frågar databasen om den tredje raden hämtas - men raderna 1 och 2 har aldrig hämtats.
För att demonstrera, prova att köra följande frågor:
SELECT S.* FROM SALARY S; -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S; -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3; -- Should return no rows
För att kringgå ditt problem, försök följande:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Dela och njut.