Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Abrufen von Daten mit Rownum in Oracle

rownum ist eine Pseudospalte, die Zeilen in der Ergebnismenge zählt, nachdem die where-Klausel angewendet wurde.

  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected

Diese Abfrage gibt jedoch unabhängig von der Anzahl der Zeilen in der Tabelle immer null Zeilen zurück.

Um dieses Verhalten zu erklären, müssen wir verstehen, wie Oracle ROWNUM verarbeitet. Beim Zuweisen von ROWNUM zu einer Zeile beginnt Oracle bei 1 und erhöht den Wert nur, wenn eine Zeile ausgewählt ist; das heißt, wenn alle Bedingungen in der WHERE-Klausel erfüllt sind. Da unsere Bedingung erfordert, dass ROWNUM größer als 2 ist, werden keine Zeilen ausgewählt und ROWNUM wird nie über 1 hinaus erhöht.

http://blog.lishman.com/2008/03/rownum.html

ein weiterer Stackoverflow-Link

Bearbeitet

diesen Absatz finde ich auf oracle Website, die viel besser ist

Bedingungstests für ROWNUM-Werte größer als eine positive Ganzzahl sind immer falsch. Diese Abfrage gibt beispielsweise keine Zeilen zurück:

SELECT * FROM employees
    WHERE ROWNUM > 1;

Der ersten abgerufenen Zeile wird eine ROWNUM von 1 zugewiesen, wodurch die Bedingung falsch wird. Die zweite abzurufende Zeile ist jetzt die erste Zeile und ihr wird ebenfalls eine ROWNUM von 1 zugewiesen, wodurch die Bedingung falsch wird. Anschließend erfüllen alle Zeilen die Bedingung nicht, sodass keine Zeilen zurückgegeben werden.

Sie können auch ROWNUM verwenden, um jeder Zeile einer Tabelle eindeutige Werte zuzuweisen, wie in diesem Beispiel: