Heim >Datenbank >Oracle >Wie schreibe ich Paging in Oracle?

Wie schreibe ich Paging in Oracle?

PHPz
PHPzOriginal
2023-04-04 13:59:374830Durchsuche

Oracle ist ein sehr beliebtes relationales Datenbankverwaltungssystem, das umfangreiche SQL-Sprachfunktionen bereitstellt, einschließlich OFFSET- und FETCH-Anweisungen für Paging. In der tatsächlichen Entwicklung müssen wir häufig Paging verwenden, um die Abfrageeffizienz zu optimieren und die Benutzererfahrung zu verbessern. In diesem Artikel wird erläutert, wie die Paging-Funktion in Oracle implementiert wird.

1. Verwenden Sie ROWNUM zum Paging.

Oracle verfügt über eine integrierte ROWNUM-Pseudospalte, die numerische Zahlen der Reihe nach zuweist und für Paging-Vorgänge verwendet werden kann. Wir können die gesamte Ergebnismenge durch eine Abfrage abrufen und dann ROWNUM verwenden, um die Daten mit der angegebenen Seitenzahl und Datensatznummer herauszufiltern.

Angenommen, wir haben eine Tabelle mit dem Namen EMPLOYEE und müssen Seite 2 abfragen und 10 Datensätze auf jeder Seite anzeigen. Sie können die folgende SQL-Anweisung verwenden, um Paging zu implementieren.

SELECT *
FROM (
  SELECT ROWNUM rn, e.*
  FROM EMPLOYEE e
  WHERE ROWNUM <= :page * :pageSize
)
WHERE rn > (:page - 1) * :pageSize

Darunter sind :page und :pageSize Parameter, die die abzufragende Seitennummer und die Anzahl der auf jeder Seite angezeigten Datensätze angeben. Der spezifische Prozess dieser SQL-Anweisung ist wie folgt:

  1. Die interne Abfrage sortiert zunächst die Datensätze in der EMPLOYEE-Tabelle nach ROWNUM-Größe und weist jedem Datensatz eine ROWNUM-Nummer zu.
  2. Die externe Abfrage verarbeitet dann die Ergebnismenge der internen Abfrage und verwendet dabei WHERE rn (:page - 1) * :pageSize, um die Daten mit der angegebenen Seitennummer und Datensatznummer herauszufiltern.

Da ROWNUM nach dem Sortieren zugewiesen wird, muss die innere Abfrage zuerst die Daten sortieren, andernfalls sind die Paging-Ergebnisse undefiniert.

Es ist zu beachten, dass die Verwendung der obigen SQL-Anweisung dazu führen kann, dass die Ergebnismenge leer ist, wenn das Abfrageergebnis nur einen Datensatz enthält. Die Lösung besteht darin, WHERE rn > (:page - 1) :pageSize in WHERE rn BETWEEN ((:page - 1) :pageSize + 1) AND (:page * :pageSize) zu ändern.

2. Verwenden Sie OFFSET- und FETCH-Paging.

Ab Oracle 12c wird Paging mit OFFSET- und FETCH-Anweisungen unterstützt. Diese Methode erfordert nicht die Verwendung von ROWNUM und die Syntax ist prägnanter und klarer. Das Folgende ist ein Beispiel für die Verwendung von OFFSET und FETCH zum Implementieren von Paging:

SELECT *
FROM EMPLOYEE
ORDER BY emp_id
OFFSET (:page - 1) * :pageSize ROWS
FETCH NEXT :pageSize ROWS ONLY

Unter diesen stellen :page und :pageSize jeweils die abzufragende Seitennummer und die Anzahl der auf jeder Seite angezeigten Datensätze dar. Der spezifische Prozess dieser SQL-Anweisung ist wie folgt:

  1. Sortieren Sie zunächst die Datensätze in der EMPLOYEE-Tabelle nach emp_id.
  2. OFFSET (:page - 1) * :pageSize ROWS gibt die Anzahl der zu überspringenden Zeilen an, also die Position des Startdatensatzes, der in der sortierten Tabelle abgefragt werden soll.
  3. FETCH NEXT :pageSize ROWS ONLY gibt die Anzahl der abzufragenden Datensätze an, d. h. die Anzahl der auf jeder Seite angezeigten Datensätze.

Seien Sie vorsichtig, wenn Sie OFFSET- und FETCH-Anweisungen zum Abfragen verwenden. Wenn die Anzahl der abgefragten Datensätze weniger als eine Seite beträgt, ist das Abfrageergebnis leer. In diesem Fall müssen wir die Anzahl der verbleibenden Datensätze manuell berechnen und mithilfe der WHERE-Klausel filtern.

3. Zusammenfassung

Das Obige stellt zwei Methoden zum Implementieren der Paging-Funktion in der Oracle-Datenbank vor: die Verwendung von ROWNUM und die Verwendung von OFFSET und FETCH. Beide Methoden haben ihre eigenen Vor- und Nachteile, und Entwickler können basierend auf bestimmten Anwendungsszenarien die geeignete Methode auswählen.

Es ist zu beachten, dass zur Verbesserung der Abfrageeffizienz beim Paging geeignete Indizes verwendet werden sollten. Wenn die Abfrageergebnisse 1.000 überschreiten, sollte gleichzeitig die Paging-Abfrage in eine Batch-Abfrage umgewandelt werden, um zu vermeiden, dass in einer einzelnen Abfrage zu viele Daten zurückgegeben werden.

Das obige ist der detaillierte Inhalt vonWie schreibe ich Paging in Oracle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn