sql - numero - pivot oracle ejemplos
Limitar el registro devuelto de la consulta SQL en Oracle (2)
Una de las aplicaciones de la que me encargo al verificar una tabla Oracle DB cada x segundos para ver si hay nuevos datos para procesar (otras aplicaciones en tiempo real lo están poblando).
El nuevo proceso de negocio de nuestros clientes nos obliga a rellenar en tiempo real esta tabla con muchos registros al mismo tiempo (digamos 10 000), pero solo unas pocas veces al día. La próxima vez que mi aplicación compruebe si hay algo que procesar, encontrará 10 000 registros e intentará procesarlos.
No está muy bien diseñado y simplemente no escala lo suficientemente bien. La solución rápida sería limitar el número de registros que la aplicación obtiene de Oracle, la próxima vez elegirá otros 50 (o lo que sea), etc.
¿Cómo puedo limitar en Oracle SQL el número de registros devueltos? ¡El orden importa!
select *
from cool_table where date >= to_date(''200901010000'', ''YYYYMMDDhh24mi'')
order by seq_nr, entry_dts;
select * from
(select c.* from cool_table c
where date >= to_date(''200901010000'', ''YYYYMMDDhh24mi'')
order by seq_nr, entry_dts)
where rownum < 50
Debe asegurarse de que el pedido se realiza antes del filtrado Rownum (de lo contrario, tomará las primeras 50 filas que encuentre, y luego las ordenará)
Comenzando con Oracle 12c, finalmente admite la opción ANSI estándar fetch first n rows
:
select *
from cool_table where date >= to_date(''200901010000'', ''YYYYMMDDhh24mi'')
order by seq_nr, entry_dts
fetch first 50 rows only;
Esto se puede combinar con un desplazamiento para paginación:
select *
from cool_table where date >= to_date(''200901010000'', ''YYYYMMDDhh24mi'')
order by seq_nr, entry_dts
offset 50 rows
fetch first 50 rows only;