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.