За да обясним това поведение, трябва да разберем как Oracle обработва ROWNUM. Когато присвоява ROWNUM на ред, Oracle започва от 1 и увеличава стойността само когато е избран ред; тоест, когато са изпълнени всички условия в клаузата WHERE. Тъй като нашето условие изисква ROWNUM да е по-голямо от 2, не се избират редове и ROWNUM никога не се увеличава повече от 1.
Изводът е, че условия като следните ще работят според очакванията.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Докато заявките с тези условия винаги ще връщат нула редове.
.. WHERE rownum =2;
.. WHERE rownum> 10;
Цитирано от Разбиране на Oracle rownum
Трябва да промените заявката си по този начин, за да работи:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
РЕДАКТИРАНЕ :Коригирах заявката, за да получа rownum след поръчката по Sal desc