Oracle
 sql >> Baza danych >  >> RDS >> Oracle

pobieranie danych za pomocą rownum w oracle

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawiaj rekordy zbiorcze do zdalnej bazy danych (dblink) za pomocą Bulk Collect

  2. Oracle:Wyszukiwanie pełnotekstowe z warunkiem

  3. Jak zaktualizować dane w polach CLOB za pomocą>> przygotowanego zapytania <<z ODP (Oracle.DataAccess)?

  4. Podaj dane uwierzytelniające UTL_MAIL.SEND, aby ominąć ORA-29278

  5. Dostrajanie wydajności instrukcji DECODE() w klauzuli WHERE