För att förklara detta beteende måste vi förstå hur Oracle bearbetar ROWNUM. När du tilldelar ROWNUM till en rad, börjar Oracle med 1 och ökar endast värdet när en rad väljs; det vill säga när alla villkor i WHERE-satsen är uppfyllda. Eftersom vårt villkor kräver att ROWNUM är större än 2, väljs inga rader och ROWNUM ökas aldrig mer än 1.
Summan av kardemumman är att tillstånd som följande kommer att fungera som förväntat.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Medan frågor med dessa villkor alltid returnerar noll rader.
.. WHERE rownum =2;
.. WHERE rownum> 10;
Citerat från Understanding Oracle rownum
Du bör ändra din fråga på detta sätt för att fungera:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
REDIGERA :Jag har korrigerat frågan för att få radnumret efter beställningen av sal desc