Aby wyjaśnić to zachowanie, musimy zrozumieć, w jaki sposób Oracle przetwarza ROWNUM. Podczas przypisywania ROWNUM do wiersza Oracle zaczyna się od 1 i zwiększa wartość tylko wtedy, gdy wiersz jest zaznaczony; oznacza to, że spełnione są wszystkie warunki w klauzuli WHERE. Ponieważ nasz warunek wymaga, aby ROWNUM było większe niż 2, żadne wiersze nie są wybierane, a ROWNUM nigdy nie jest zwiększane o 1.
Najważniejsze jest to, że warunki takie jak poniższe będą działały zgodnie z oczekiwaniami.
.. GDZIE rownum =1;
.. GDZIE rownum <=10;
Zapytania z tymi warunkami zawsze zwrócą zero wierszy.
.. GDZIE rownum =2;
.. GDZIE rownum> 10;
Cytat z Understanding Oracle rownum
Aby działać, należy zmodyfikować zapytanie w ten sposób:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
EDYTUJ :poprawiłem zapytanie, aby uzyskać numer wiersza po zamówienie według opisu sal