Per spiegare questo comportamento, dobbiamo capire come Oracle elabora ROWNUM. Quando si assegna ROWNUM a una riga, Oracle parte da 1 e incrementa il valore solo quando viene selezionata una riga; cioè, quando tutte le condizioni nella clausola WHERE sono soddisfatte. Poiché la nostra condizione richiede che ROWNUM sia maggiore di 2, non viene selezionata alcuna riga e ROWNUM non viene mai incrementato oltre 1.
La conclusione è che condizioni come le seguenti funzioneranno come previsto.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Mentre le query con queste condizioni restituiranno sempre zero righe.
.. DOVE rownum =2;
.. DOVE rownum> 10;
Citato da Understanding Oracle rownum
Dovresti modificare la tua query in questo modo per funzionare:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
MODIFICA :Ho corretto la query per ottenere il rownum dopo l'ordine per sal desc