sql >> Base de Datos >  >> RDS >> Oracle

sql (oracle) para seleccionar los primeros 10 registros, luego los siguientes 10, y así sucesivamente

Solo hay una forma bastante complicada de hacer esto, lo cual es un verdadero dolor con Oracle. Simplemente deberían implementar una cláusula LIMIT/OFFSET...

El número de fila se asigna después la fila ha sido seleccionada por la cláusula where, por lo que un número de fila siempre debe comenzar con 1. where rownum > x siempre se evaluará como falso.

Además, rownum se asigna antes de que se realice la clasificación , por lo que el número de fila no estará en el mismo orden que dice su pedido.

Puede solucionar ambos problemas con una subselección:

 select a,b,c, rn from 
    ( select a,b,c, rownum rn from 
         ( select a,b,c from the_table where x = ? order by c)
      where rownum < Y)
  where rn > X

Si no necesita ordenar (pero solo entonces), puede simplificar a

 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X