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.