TOP O LIMIT EN ORACLE CON ORDER BY

Para limitar el número de filas devueltas en SQL Server hacemos lo siguiente:

SELECT TOP 5, * FROM tabla ORDER BY columna_sueldo;

En MySQL es también muy sencillo:

SELECT * FROM tabla ORDER BY columna_sueldo LIMIT 5;

lo que hacen ambas consultas es primero ordenar las filas según el campo indicado (columna_sueldo) y luego mostrarme los 5 primeros campos, si omitimos el order by primero seleccionará las filas en su orden natural y luego nos devolverá los primeros 5 campos.

En Oracle hacemos lo siguiente:

SELECT * FROM tabla WHERE rownum <= 5;

Esto hace lo segundo que mencionábamos en el párrafo anterior selecciona todas las filas y luego nos devuelve las 5 primeras según como lo ordeno.

Ahora si querríamos que nos muestre los 5 sueldos más altos en la tabla empleados por ejemplo pensaríamos en hacer lo siguiente:

SELECT * FROM tabla_Empleado WHERE rownum <= 5 ORDER BY columna_sueldo;

Pero si ejecutamos la consulta no nos devuelve los datos que esperábamos, ¿Qué paso?
Lo que paso fue que Oracle primero selecciono las 5 primeras filas y esas 5 primeras las ordeno según el sueldo, porque la sentencia WHERE siempre se ejecuta antes que ORDER BY. Entonces ¿Cómo solucionamos esto? pues con subconsultas aquí el código:

SELECT * FROM ( SELECT * FROM empleados ORDER BY sueldo) WHERE rownum <= 5;

Explicación del código:
En esta consulta lo primero que se va a ejecutar va a ser la subconsulta, con esto aseguramos que nos ordene las filas según el sueldo y luego se ejecutará el WHERE que nos seleccionará las primeras 5 columnas.

Como siempre las Sistemas de Gestión de Bases de Datos al igual que muchas otras tecnologías haciendo las cosas como mejor les parezca sin estandarizar las cosas nos terminan complicando a nosotros.

ERROR ORA-12505 – NETBEANS – ORACLE

Cuando intentas conectar Netbeans u otro IDE con Oracle usando el servicio de ID (SID), nos pide justamente que ingresemos este SID en uno de los campos. En Netbeans por ejemplo nos lo pide en el campo «Service ID (SID)» como se muestra en la siguiente imagen:

Netbeans - Oracle

Pero… ¿Como sabemos cual es nuestro SID? Púes muy fácil realizamos la siguiente consulta desde Oracle -Debemos estar conectados como System-: select instance from v$thread; en mi caso devolvió:

SID Oracle

Así que ingresamos el resultado en el campo y listo, algunos tienen este problema al intentar conectar la versión de pago de Oracle 10g en Netbeans ya que en el campo se muestra por defecto XE que es el  SID del Oracle Express y entonces nos arroja un Error ORA-12505, simplemente cámbienlo por el resultado que obtuvieron y listo!

Enlaces de interés: