C'è un modo per far funzionare una Oraclequery come se contenesse una MySQL limitclausola?
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 rownumpseudo-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.