Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

sql (oracle) para selecionar os 10 primeiros registros, depois os próximos 10 e assim por diante


Existe apenas uma maneira bastante complicada de fazer isso, o que é uma verdadeira dor com a Oracle. Eles devem apenas implementar uma cláusula LIMIT/OFFSET...

O rownum é atribuído depois a linha foi selecionada pela cláusula where, de modo que um rownum deve sempre começar com 1. where rownum > x sempre será avaliada como false.

Além disso, rownum é atribuído antes que a classificação seja feita , então o rownum não estará na mesma ordem que o seu pedido por say.

Você pode contornar os dois problemas com uma subseleção:
 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

Se você não precisa ordenar (mas somente então), você pode simplificar para
 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X