Oracle
 sql >> Base de données >  >> RDS >> Oracle

Sélection de la deuxième ligne d'une table à l'aide de rownum

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