C'è un modo per far funzionare una Oracle
query come se contenesse una MySQL limit
clausola?
In MySQL
, posso fare questo:
select *
from sometable
order by name
limit 20,10
per ottenere dalla 21a alla 30a fila (salta le prime 20, dai le successive 10). Le righe sono selezionate dopo il order by
, quindi inizia davvero il 20 ° nome in ordine alfabetico.
In Oracle
, l'unica cosa che la gente menziona è la rownum
pseudo-colonna, ma viene valutata prima order by
, il che significa che:
select *
from sometable
where rownum <= 10
order by name
restituirà un set casuale di dieci righe ordinate per nome, che di solito non è quello che voglio. Inoltre, non consente di specificare un offset.
ORDER BY
. Questo è il punto principale per ordinare prima. Se i dati sottostanti cambiano e il set di risultati cambia a causa di ciò, perché non mostrare all'utente i risultati aggiornati anziché le informazioni obsolete? Inoltre, la gestione dello stato è una piaga da evitare il più possibile. È una fonte costante di complicazioni e bug; ecco perché il funzionale sta diventando così popolare. E quando vorresti far scadere l'intero set di risultati in memoria? Nel web, non hai modo di sapere quando l'utente lascia.