ROWNUM
não é atribuído até você consultar, então você não poderá usá-lo em um WHERE
cláusula assim. Você pode fazer o seguinte:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
O
ROWNUM
é a posição da linha no conjunto de resultados e é avaliada após a seleção dos registros. Esses tipos de consultas nunca funcionarão:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
Mas isso vai funcionar
WHERE ROWNUM < x
Como você deseja avaliar o
rownum
com o mod
não funcionará porque o rownum
não está disponível naquele momento. É por isso que você teria que colocá-lo em uma subconsulta para usar o mod
função.