Oracle rownum commence à 1, donc vous n'obtiendrez jamais le premier rownum si vous dites between 2 and N
.
Il faut une ligne pour "initier" la séquence de pseudo-colonnes rownum, donc en éliminant rownum 1 dans vos critères, vous éliminez tous les rownums (ou chaque ligne a essentiellement rownum 0
).
Regarde ca comme ca. Vous n'obtenez pas de ROWNUM tant que la base de données ne vous renvoie pas de ligne. La première ligne de tout critère sera toujours ROWNUM 1.
Maintenant, l'astuce que vous pouvez utiliser est d'utiliser une sous-requête. Chaque sous-requête aura son propre rownum, et si vous l'associez à un autre nom de colonne, vous pouvez le conserver dans des requêtes externes et le traiter comme vous le souhaitez. Donc, si vous cherchez à implémenter la pagination d'un ensemble de résultats, vous devez normalement alias rownum des résultats internes comme rownum_ vers une sous-requête externe pour limiter avec BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Mais notez que le jeu de résultats externe aura son propre numéro de ligne, vous pouvez donc :
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Vous verrez rownum
sur le résultat final commence toujours à 1, mais votre résultat interne aura rownum_
à partir de 2.