ROWNUM
non viene assegnato fino a quando non esegui una query, quindi non sarai in grado di usarlo in un WHERE
clausola del genere.
Puoi fare quanto segue:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
Il ROWNUM
è la posizione della riga nel set di risultati e viene valutata dopo la selezione dei record.
Questi tipi di query non funzioneranno mai:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
Ma funzionerà
WHERE ROWNUM < x
Dal momento che vuoi valutare il rownum
con il mod
funzione non funzionerà perché rownum
non è disponibile a quel punto. Questo è il motivo per cui dovresti inserirlo in una sottoquery per usare il mod
funzione.