Oracle přiřazuje hodnoty ROWNUM postupně, jak jsou řádky vytvářeny dotazem – tedy první načtený řádek získá ROWNUM=1, druhý načtený řádek získá ROWNUM=2, třetí načtený řádek získá ROWNUM=3 atd. Upozornění – pro řádek pro přiřazení ROWNUM=3 MUSÍ být načteny dva předchozí řádky. A to je důvod, proč váš dotaz nevrací žádné řádky. Žádáte databázi o načtení třetího řádku – ale řádky 1 a 2 nebyly nikdy načteny.
Chcete-li demonstrovat, zkuste spustit následující dotazy:
SELECT S.* FROM SALARY S; -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S; -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3; -- Should return no rows
Chcete-li problém vyřešit, vyzkoušejte následující:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Sdílejte a užívejte si.