2010-05-26 10 views
29

Ich entwickle eine Webanwendung und muss geordnete Ergebnisse paginieren. Ich verwende normalerweise LIMIT/OFFSET für diesen Zweck.Alternativen zu LIMIT und OFFSET für Paging in Oracle

Welcher ist der beste Weg, geordnete Ergebnisse in Oracle zu sortieren? Ich habe einige Beispiele mit Hilfe von Rownum und Unterabfragen gesehen. Ist das so? Könnten Sie mir eine Probe geben, diese SQL Oracle für die Übersetzung:

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 LIMIT 14 

(Ich bin mit 10g Oracle, für das, was es wert ist)

Dank!


Antwort: den Link unten durch karim79 mit Hilfe des mitgelieferten diese SQL würde wie folgt aussehen:

SELECT * FROM (
    SELECT rownum rnum, a.* 
    FROM(
     SELECT fieldA,fieldB 
     FROM table 
     ORDER BY fieldA 
    ) a 
    WHERE rownum <=5+14 
) 
WHERE rnum >=5 
+0

Ich denke, die letzte Zeile eher sagen sollte WHERE rnum> 5' (nicht '> = '), sonst werden Sie 15 Datensätze erhalten, nur die ersten vier zu überspringen. – peterp

Antwort

15
+0

Der Link funktioniert nicht mehr. – codevour

+0

interessant lesen Sie weiter, wie rownum funktioniert: http://blog.lishman.com/2008/03/rownum.html – xastor

+0

Updated defekten Link. Hoffe, dass dieser weiter funktioniert :-). – sleske

16

Da Sie auf 10g sind, sollten Sie in der Lage sein, den ROWNUM Ansatz Funktionen analytischen

SELECT fieldA, 
     fieldB 
    FROM (SELECT fieldA, 
       fieldB, 
       row_number() over (order by fieldA) rnk 
      FROM table_name) 
WHERE rnk BETWEEN 5 AND 14; 
+2

vielen Dank, das ist genau das, was ich brauchte :) Warum oh warum besteht Orakel darauf, Dinge auf die harte Art zu tun! – mic