Nefunguje, protože:pro první řádek ROWNUM je 1 a v tomto případě MOD(ROWNUM,2) je 1 a od vašeho WHERE příkaz je MOD(ROWNUM,2)=0 pak se to sníží na 1=0 a řádek je zahozen. Následující řádek pak bude testován proti ROWNUM z 1 (protože předchozí řádek již není na výstupu a nebude mít číslo řádku), což v testu opět neprojde a bude zahozeno. Opakuji, nevolnost a všechny řádky nesplňují WHERE test a jsou vyřazeny.
Pokud se pokusíte získat liché řádky tímto způsobem pomocí WHERE MOD(ROWNUM,2)=1 pak vrátí pouze první řádek a druhý a další řádky v testu neprojdou a nikdy nebudou zahrnuty do dotazu.
Jak navrhuje Vijaykumar Hadalgi, musíte vybrat ROWNUM v dílčím dotazu (kde může očíslovat všechny řádky bez klauzule where, která jej omezí) a poté ve vnějším dotazu provést test pro omezení řádků:
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