Oracle
 sql >> Database >  >> RDS >> Oracle

sql (oracle) per selezionare i primi 10 record, quindi i successivi 10 e così via

C'è solo un modo piuttosto contorto per farlo, che è un vero problema con Oracle. Dovrebbero semplicemente implementare una clausola LIMIT/OFFSET...

Il rownum viene assegnato dopo la riga è stata selezionata dalla clausola where, quindi un rownum deve sempre iniziare con 1. where rownum > x valuterà sempre come falso.

Inoltre, rownum viene assegnato prima che l'ordinamento sia terminato , quindi il rownum non sarà nello stesso ordine del tuo ordine di dice.

Puoi aggirare entrambi i problemi con una sottoselezione:

 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 non hai bisogno di ordinare (ma solo allora), puoi semplificare in

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