Existe uma maneira de fazer uma Oracle
consulta se comportar como se contenha uma MySQL limit
cláusula?
Em MySQL
, eu posso fazer isso:
select *
from sometable
order by name
limit 20,10
para obter as linhas 21 a 30 (pule as 20 primeiras, dê as 10 seguintes). As linhas são selecionadas após o order by
, então ele realmente começa com o vigésimo nome em ordem alfabética.
Em Oracle
, a única coisa que as pessoas mencionam é a rownum
pseudo-coluna, mas ela é avaliada antes order by
, o que significa isso:
select *
from sometable
where rownum <= 10
order by name
retornará um conjunto aleatório de dez linhas ordenadas por nome, que geralmente não é o que eu quero. Também não permite especificar um deslocamento.
ORDER BY
. Esse é o objetivo de pedir primeiro. Se os dados subjacentes mudarem e seu conjunto de resultados mudar por causa disso, por que não mostrar ao usuário os resultados atualizados em vez de informações desatualizadas? Além disso, a gestão do estado é uma praga a ser evitada o máximo possível. É uma fonte constante de complicações e bugs; é por isso que o funcional está ficando tão popular. E quando você saberia expirar todo o conjunto de resultados na memória? Na web, você não tem como saber quando o usuário sai.