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

sélectionnez rownum à partir du salaire où rownum=3 ;

Oracle attribue des valeurs à ROWNUM de manière séquentielle au fur et à mesure que les lignes sont produites par la requête - ainsi, la première ligne extraite obtient ROWNUM=1, la deuxième ligne extraite obtient ROWNUM=2, la troisième ligne extraite obtient ROWNUM=3, etc. Remarque - pour une ligne pour se voir attribuer ROWNUM=3, les deux lignes précédentes DOIVENT être récupérées. Et c'est pourquoi votre requête ne renvoie aucune ligne. Vous demandez à la base de données la troisième ligne extraite - mais les lignes 1 et 2 n'ont jamais été extraites.

Pour illustrer, essayez d'exécuter les requêtes suivantes :

SELECT S.* FROM SALARY S;          -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows

Pour contourner votre problème, essayez ce qui suit :

SELECT ROW_NUMBER FROM
  (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
  WHERE ROW_NUMBER = 3;

Partagez et profitez.