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

Comportement d'Oracle rownum avec la fonction mod

ROWNUM n'est pas attribué jusqu'à ce que vous interrogez, vous ne pourrez donc pas l'utiliser dans un WHERE clause comme ça.

Vous pouvez effectuer les actions suivantes :

SELECT COUNT(*) 
FROM
(
  select v1, v2, rownum rn
  from Foo 
) f
WHERE mod(rn,2) = 0;

Le ROWNUM est la position de la ligne dans le jeu de résultats, et elle est évaluée une fois les enregistrements sélectionnés.

Ces types de requêtes ne fonctionneront jamais :

WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Mais cela fonctionnera

WHERE ROWNUM < x

Puisque vous voulez évaluer le rownum avec le mod fonction, cela ne fonctionnera pas car le rownum n'est pas disponible à ce moment-là. C'est pourquoi, il faudrait le placer dans une sous-requête pour utiliser le mod fonction.