Oracle przypisuje wartości do ROWNUM sekwencyjnie, gdy wiersze są tworzone przez zapytanie — w ten sposób pierwszy pobrany wiersz otrzymuje ROWNUM=1, drugi pobierany jest ROWNUM=2, trzeci pobierany wiersz otrzymuje ROWNUM=3 itd. Uwaga — dla wiersza do przypisania ROWNUM=3 dwa poprzednie wiersze MUSZĄ zostać pobrane. I dlatego zapytanie nie zwraca żadnych wierszy. Pytasz bazę danych o pobranie trzeciego wiersza — ale wiersze 1 i 2 nigdy nie zostały pobrane.
Aby to zademonstrować, spróbuj uruchomić następujące zapytania:
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
Aby obejść problem, wypróbuj następujące rozwiązania:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Dziel się i ciesz.