Heim > Datenbank > MySQL-Tutorial > ROWNUM in Oracle: Wie erreicht man die richtige Paginierung und vermeidet häufige Fallstricke?

ROWNUM in Oracle: Wie erreicht man die richtige Paginierung und vermeidet häufige Fallstricke?

Patricia Arquette
Freigeben: 2025-01-19 06:18:10
Original
527 Leute haben es durchsucht

ROWNUM in Oracle: How to Achieve Proper Pagination and Avoid Common Pitfalls?

Oracle ROWNUM und Paginierung: Häufige Probleme und Lösungen

Dieser Artikel befasst sich mit häufigen Herausforderungen, die bei der Verwendung von ROWNUM für die Paginierung in Oracle SQL auftreten.

Problem 1: Unwirksame WHERE-Klausel mit ROWNUM

Warum gibt SELECT * FROM Person WHERE rownum > 100 keine Ergebnisse zurück?

ROWNUM wird nach der anfänglichen Filterungsphase (Prädikat) zugewiesen. Da ein ROWNUM-Wert erst nach der Zuweisung erhöht wird, kann ein Wert größer als 1 auf diese Weise nicht direkt mithilfe einer WHERE-Klausel ausgewählt werden. Keine Zeilen erfüllen die Bedingung ROWNUM > 100.

Problem 2: ROWNUM BETWEENEinschränkungen

Warum ist WHERE rownum BETWEEN lowerBound AND upperBound nicht für die Paginierung geeignet?

Diese Syntax ist auch deshalb unwirksam, weil die ROWNUM-Zuweisung vor der WHERE-Klauselauswertung erfolgt. Oracle kann einen Bereich von ROWNUMWerten

nicht direkt auswählen

Lösung: Oracle 12c und höher (Top-n-Zeilenbegrenzung)

Oracle 12c führte einen überlegenen Ansatz ein: „Top-n-Row-Limiting“ mit OFFSET und FETCH. Zum Beispiel:

<code class="language-sql">SELECT empno, sal
FROM   emp
ORDER BY sal
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;</code>
Nach dem Login kopieren

Dadurch werden die Zeilen 5–8 effizient abgerufen (Offset 4, Abruf 4). Diese Methode wird Techniken vorgezogen, die ausschließlich auf ROWNUM.

basieren

Problem 3: Ausblenden der ROWNUM Spalte

Wie können wir verhindern, dass die Spalte ROWNUM im Ergebnissatz angezeigt wird?

Listen Sie einfach nur die gewünschten Spalten in der äußeren SELECT-Anweisung auf. Alternativ können Sie in SQL*Plus den Befehl NOPRINT verwenden, um die Ausgabe bestimmter Spalten zu unterdrücken.

Problem 4: Sicherstellung der korrekten Paginierung mit ROWNUM (ältere Oracle-Versionen)

Kann ROWNUM eine korrekte Paginierung erreicht werden?

Ja, aber es erfordert eine verschachtelte Abfragestruktur:

<code class="language-sql">SELECT val
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   t
                ORDER BY val)
        WHERE rownum <= 8)
WHERE  rnum >= 5;</code>
Nach dem Login kopieren

Dadurch werden die Zeilen 5–8 korrekt abgerufen. Die innere Abfrage weist ROWNUM zu, die mittlere Abfrage filtert basierend auf der Obergrenze und die äußere Abfrage filtert basierend auf der unteren Grenze. Allerdings bleibt die OFFSET/FETCH-Methode in Oracle 12c und höher die effizientere und lesbarere Option.

Das obige ist der detaillierte Inhalt vonROWNUM in Oracle: Wie erreicht man die richtige Paginierung und vermeidet häufige Fallstricke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage