Limitar el número de filas en la salida de un consulta en Oracle

En fin, hoy primer contacto con el SGBD de Oracle (sí, ese privativo tan caro y a la vez tan extendido en la administración), del cual no puedo decir mucho porque con una clase, sobre fundamentos de SQL además (que no es por ir de sobrado, pero la primera semana me da que me voy a aburrir repasando lo más básico de siempre), pues no da para haber testado mucho. Lo que sí comprobé, tonteando un poco, es que la forma de forma de limitar el número de filas en la salida de una consulta no tiene nada que ver ni con SQL-Server, PostgreSQL o MySQL.

Porque claro, tú quieres por ejemplo sacar los 10 que más cobran y en MySQL o en PostgreSQL lo haces tal que así

SELECT nombre FROM empleados ORDER BY salario LIMIT 10

Y si eres de los de tito Bill te apañarías con:

SELECT TOP 10 nombre FROM empleados ORDER BY salario 

Total, que andaba trasteando un rato después de hacer los ejercicios, tipo “me ha sobrado un huevo de tiempo, vamos a probar si otras cosas van igual que en algunos de los sistemas gestore que he usado” y ahí me encuentro que esto cambia, que ni es como en Microsoft ni como en los otros dos SGBD libres. Aunque curiosamente la palabra limit aparezca como reservada (todavía no se para qué, una de las cosas que espero aprender en el susodicho curso). Tras un poco de investigación entre la (vasta) documentación de Oracle me ecuentro con que la cosa va así:

SELECT nombre FROM empleados ORDER BY salario WERE rownum<=10

Conclusión/explicación: Oracle nos ofrece una pseudocolumna (iba a llamarlo variable, pero acabo de leer que este es el término más correcto) llamada rownum (número de fila) que nos servirá, mediante una condición where, para limitar la salida de resultados de la consulta (también puede valer para realizar consultas paginadas en una web, pero igual te chupas demasiadas conexiones al motor si lo haces así en vez de bajar todo de vez y manejarlo en el cliente… ahí ya depende del proyecto). Si quieres 10 filas le dices “que el número de fila sea menor o igual que diez”, que quieres 20… lo mismo.

Anuncios

Un comentario en “Limitar el número de filas en la salida de un consulta en Oracle

  1. Baskito

    Buenas, simplemente por puntillar ya que me salió el problema.

    Hay que tener cuidado si se ordena y se utiliza el rownum. El order by se ejecuta despues de capturar el rownum, con lo cual puede que no salgan los resultados deseados.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s