¿Hay alguna manera de hacer que una Oracle
consulta se comporte como si contuviera una MySQL limit
cláusula?
En MySQL
, puedo hacer esto:
select *
from sometable
order by name
limit 20,10
para obtener las filas 21 a 30 (omita las primeras 20, dé las siguientes 10). Las filas se seleccionan después de order by
, por lo que realmente comienza alfabéticamente en el vigésimo nombre.
En Oracle
, lo único que la gente menciona es la rownum
pseudo-columna, pero se evalúa antes order by
, lo que significa esto:
select *
from sometable
where rownum <= 10
order by name
devolverá un conjunto aleatorio de diez filas ordenadas por nombre, que generalmente no es lo que quiero. Tampoco permite especificar un desplazamiento.
ORDER BY
. Ese es el punto de ordenar primero. Si los datos subyacentes cambian y su conjunto de resultados cambia debido a ello, ¿por qué no mostrar al usuario los resultados actualizados en lugar de la información desactualizada? Además, la gestión estatal es una plaga que debe evitarse tanto como sea posible. Es una fuente constante de complicaciones y errores; Es por eso que funcional se está volviendo tan popular. ¿Y cuándo sabrías caducar todo el conjunto de resultados en la memoria? En la web, no tienes forma de saber cuándo se va el usuario.