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