2010-05-26 42 views
29

Estoy desarrollando una aplicación web y necesito buscar resultados en la página. Yo normalmente uso LIMIT/OFFSET para este propósito.Alternativas a LIMIT y OFFSET para paginación en Oracle

¿Cuál es la mejor forma de ordenar los resultados en Oracle? He visto algunas muestras usando rownum y subconsultas. ¿Es ese el camino? ¿Me podría dar una muestra para la traducción de este SQL a Oracle:

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

(Estoy usando Oracle 10g, por lo que vale la pena)

Gracias!


Respuesta: Usando el enlace que aparece a continuación por karim79, este SQL se vería así:

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

Creo que la última línea debería decir más bien 'DONDE rnum> 5' (no'> = '), de lo contrario obtendrá 15 registros, omitiendo únicamente los primeros cuatro. – peterp

Respuesta

15
+0

El enlace ya no funciona. – codevour

+0

información interesante sobre cómo opera rownum: http://blog.lishman.com/2008/03/rownum.html – xastor

+0

Se ha actualizado el enlace roto. Espero que este siga funcionando :-). – sleske

16

Ya que estás en 10g, usted debería ser capaz de simplificar el enfoque ROWNUM utilización de funciones analíticas

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

muchas gracias, esto es exactamente lo que necesitaba :) ¿por qué oh oráculo insiste en hacer las cosas de la manera difícil! – mic