Oracle assegna i valori a ROWNUM in sequenza poiché le righe vengono prodotte dalla query, quindi la prima riga recuperata ottiene ROWNUM=1, la seconda riga recuperata ottiene ROWNUM=2, la terza riga recuperata ottiene ROWNUM=3, ecc. Avviso - per una riga da assegnare ROWNUM=3 DEVONO essere recuperate due righe precedenti. Ed è per questo che la tua query non restituisce righe. Stai chiedendo al database la terza riga recuperata, ma le righe 1 e 2 non sono mai state recuperate.
Per dimostrare, prova a eseguire le seguenti query:
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
Per aggirare il tuo problema, prova quanto segue:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Condividi e divertiti.