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.