rownum to pseudokolumna, która zlicza wiersze w zestawie wyników po zastosowaniu klauzuli where.
SELECT table_name
FROM user_tables
WHERE rownum > 2;
TABLE_NAME
------------------------------
0 rows selected
Jednak to zapytanie zawsze zwróci zero wierszy, niezależnie od liczby wierszy w tabeli.
Aby wyjaśnić to zachowanie, musimy zrozumieć, w jaki sposób Oracle przetwarza ROWNUM. Podczas przypisywania ROWNUM do wiersza Oracle rozpoczyna się od 1 i zwiększa wartość tylko po zaznaczeniu wiersza; to znaczy, gdy wszystkie warunki w klauzuli WHERE są spełnione. Ponieważ nasz warunek wymaga, aby ROWNUM było większe niż 2, żadne wiersze nie są wybierane, a ROWNUM nigdy nie jest zwiększane powyżej 1.
http://blog.lishman.com/2008/03/rownum.html
kolejny link do przepełnienia stosu
Edytowane
ten akapit znajdę na oracle strona internetowa, która jest znacznie lepsza
Warunki testowania dla wartości ROWNUM większych niż dodatnia liczba całkowita są zawsze fałszywe. Na przykład to zapytanie nie zwraca żadnych wierszy:
SELECT * FROM employees
WHERE ROWNUM > 1;
Pierwszemu pobranemu wierszowi przypisywana jest wartość ROWNUM równa 1, co powoduje, że warunek jest fałszywy. Drugi wiersz, który ma zostać pobrany, jest teraz pierwszym wierszem i jest mu również przypisywana wartość ROWNUM równa 1, co powoduje, że warunek jest fałszywy. Wszystkie wiersze następnie nie spełniają warunku, więc żadne wiersze nie są zwracane.
Możesz również użyć ROWNUM, aby przypisać unikalne wartości do każdego wiersza tabeli, jak w tym przykładzie: