Oracle: consulta con resultados "paginados"
9, 21 de 2005-11-21 de 2005
Este pequeño truco nos evita que las consultas nos devuelvan gran cantidad de resultados que luego tenemos que paginar.
Imaginemos, por ejemplo, que tenemos una tabla con 2000 registros que deseamos mostrar de 50 en 50. Lo más habitual es recuperar los 2000 registros y utilizar la programación para hacer una paginación.
Esto nos consume gran cantidad de recursos, ya que la consulta precisará más tiempo y, en el caso de que el servidor de bases de datos sea distinto al servidor web, la transferencia de datos entre uno y otro servidor será también más lenta.
La solución: recuperar sólo los registros que necesitamos. Esto se hace del siguiente modo:
SELECT *
FROM ( SELECT a.*, ROWNUM rnum
FROM (
//AQUI ES DONDE VA MI CONSULTA
SELECT * from NOMBRE_DE_LA_TABLA
WHERE condiciones ORDER BY orden deseado
//AQUI ACABA MI CONSULTA
) a
WHERE ROWNUM <= 50 )//cuando el número de registro sea igual o inferior a 50
WHERE rnum >= 1 //cuando el número de registro sea igual o superior a 1
Esto nos mostraría los registros del 1 al 50. Sería por lo tanto, en la programación previa a la consulta, donde habría que especificar desde que registro hasta que registro queremos recuperar.
Imaginemos, por ejemplo, que tenemos una tabla con 2000 registros que deseamos mostrar de 50 en 50. Lo más habitual es recuperar los 2000 registros y utilizar la programación para hacer una paginación.
Esto nos consume gran cantidad de recursos, ya que la consulta precisará más tiempo y, en el caso de que el servidor de bases de datos sea distinto al servidor web, la transferencia de datos entre uno y otro servidor será también más lenta.
La solución: recuperar sólo los registros que necesitamos. Esto se hace del siguiente modo:
SELECT *
FROM ( SELECT a.*, ROWNUM rnum
FROM (
//AQUI ES DONDE VA MI CONSULTA
SELECT * from NOMBRE_DE_LA_TABLA
WHERE condiciones ORDER BY orden deseado
//AQUI ACABA MI CONSULTA
) a
WHERE ROWNUM <= 50 )//cuando el número de registro sea igual o inferior a 50
WHERE rnum >= 1 //cuando el número de registro sea igual o superior a 1
Esto nos mostraría los registros del 1 al 50. Sería por lo tanto, en la programación previa a la consulta, donde habría que especificar desde que registro hasta que registro queremos recuperar.


