Pour expliquer ce comportement, nous devons comprendre comment Oracle traite ROWNUM. Lors de l'affectation de ROWNUM à une ligne, Oracle commence à 1 et n'incrémente la valeur que lorsqu'une ligne est sélectionnée ; c'est-à-dire lorsque toutes les conditions de la clause WHERE sont remplies. Étant donné que notre condition exige que ROWNUM soit supérieur à 2, aucune ligne n'est sélectionnée et ROWNUM n'est jamais incrémenté au-delà de 1.
L'essentiel est que des conditions telles que les suivantes fonctionneront comme prévu.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Alors que les requêtes avec ces conditions renverront toujours zéro ligne.
.. WHERE rownum =2;
.. WHERE num_ligne> 10;
Citation de Understanding Oracle rownum
Vous devez modifier votre requête de cette manière afin de fonctionner :
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
MODIFIER :J'ai corrigé la requête pour obtenir le rownum après la commande par sal desc