Abychom toto chování vysvětlili, musíme pochopit, jak Oracle zpracovává ROWNUM. Při přiřazování ROWNUM řádku začíná Oracle na 1 a zvyšuje hodnotu pouze při výběru řádku; to znamená, když jsou splněny všechny podmínky v klauzuli WHERE. Protože naše podmínka vyžaduje, aby ROWNUM bylo větší než 2, nejsou vybrány žádné řádky a ROWNUM se nikdy nezvyšuje nad 1.
Pointa je, že podmínky jako následující budou fungovat podle očekávání.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Zatímco dotazy s těmito podmínkami vždy vrátí nula řádků.
.. WHERE rownum =2;
.. WHERE rownum> 10;
Citováno z Understanding Oracle rownum
Měli byste svůj dotaz upravit tímto způsobem, aby fungoval:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
UPRAVIT :Opravil jsem dotaz, abych získal rownum po objednávka podle sal desc