Não está funcionando porque:para a primeira linha
ROWNUM
é 1
e, neste caso, MOD(ROWNUM,2)
é 1
e desde seu WHERE
declaração é MOD(ROWNUM,2)=0
então isso reduz para 1=0
e a linha é descartada. A linha subsequente será testada em relação a um ROWNUM
de 1 (já que a linha anterior não está mais na saída e não terá um número de linha), que novamente falhará no teste e será descartada. Repita, ad nauseum e todas as linhas falham no WHERE
teste e são descartados. Se você tentar obter as linhas ímpares dessa maneira usando
WHERE MOD(ROWNUM,2)=1
em seguida, ele retornará apenas a primeira linha e a segunda e as linhas subsequentes falharão no teste e nunca serão incluídas na consulta. Como sugere Vijaykumar Hadalgi, você precisa selecionar o ROWNUM em uma subconsulta (onde pode numerar todas as linhas sem uma cláusula where para restringi-lo) e depois na consulta externa realizar o teste para restringir as linhas:
SELECT ename, job
FROM (
SELECT ename,
job,
ROWNUM AS row_id -- Generate ROWNUM second.
FROM (
SELECT ename, job
FROM Emp
ORDER BY ename -- ORDER BY first.
)
)
WHERE MOD( row_id, 2 ) = 0; -- Filter third.
SQLFIDDLE