ROWNUM
tilldelas inte förrän du frågar, så du kommer inte att kunna använda den i en WHERE
sådan klausul.
Du kan göra följande:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
ROWNUM
är radens position i resultatuppsättningen och den utvärderas efter att posterna har valts.
Dessa typer av frågor kommer aldrig att fungera:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
Men det här kommer att fungera
WHERE ROWNUM < x
Eftersom du vill utvärdera rownum
med mod
funktion kommer det inte att fungera eftersom rownum
är inte tillgänglig vid den tidpunkten. Det är därför du måste placera den i en underfråga för att använda mod
fungera.