PL-SQL Procedures en OracleSi sabes como utilizar la pseudo columna ROWNUM en tus PL-SQL Procedures en Oracle, podrás controlar la cantidad de filas o registros que deseas obtener cuando construyes una sentencia SELECT en los PL-SQL Procedures en Oracle.

La seudo columna ROWNUM no es una columna real, esta permite asignar un número aleatorio a las filas obtenidas por una consulta SELECT, esto no significa que la fila tenga asignado un número de forma permanente, eso es un error conceptual que confunde mucho a los desarrolladores. En una query no se puede pedir que se devuelva la fila 10, eso no existe en los PL-SQL Procedures en Oracle.

El valor de la seudo columna ROWNUM es asignado a medida que el SELECT va obteniendo las filas solicitadas, el número asignado es correlativo y comienza en 1, 2, 3, 4… N, donde N es el total de filas obtenidas por la consulta SELECT.

Revisemos algunos ejemplos prácticos para que entiendas mejor como usar la seudo columna ROWNUM en tus PL-SQL Procedures en Oracle.

Ejemplo #1: Supone que deseas obtener solo los primeros 7 empleados de un departamento en particular, veamos como se hace:

/* PL-SQL Procedures en Oracle */

Select emp.id_empleado, emp.rut, emp.nombre, emp.direccion

From t_empleado emp

Where emp.id_departamento = pin_id_departamento

And ROWNUM = 7;

Esta consulta no funcionará para obtener los primeros 7 empleados y tampoco obtendrá el empleado número 7, ya que el valor del ROWNUM aún no es asignado. Para que funcione correctamente solo se debe hacer el siguiente cambio:

/* PL-SQL Procedures en Oracle */

And ROWNUM <= 7;

En este ejemplo se cambio el signo < por el signo <=, de esta forma se obtienen las primeras 7 filas de la consulta de forma correcta.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Supone ahora que deseas obtener los primeros 7 empleados que tengan los sueldos más altos, veamos como se hace:

/* PL-SQL Procedures en Oracle */

Select emp.id_empleado, emp.rut, emp.nombre, emp.direccion, emp.sueldo

From t_empleado emp

Where emp.id_departamento = pin_id_departamento

And ROWNUM <= 7

Order By emp.sueldo desc ;

Este ejemplo no funcionará, si bien la consulta retornará los primeros 7 empleados estos no serán los de mayor sueldo, ya que el SELECT solo devolverá las 7 primeras filas que encuentre. Para que funcione correctamente se debe realizar el siguiente cambio:

/* PL-SQL Procedures en Oracle */

Select Dat.*

From (

Select emp.id_empleado, emp.rut, emp.nombre, emp.direccion, emp.sueldo

From t_empleado emp

Where emp.id_departamento = pin_id_departamento

Order By emp.sueldo desc ) dat

Where ROWNUM <= 7;

En este ejemplo primero se realiza una Subquery (VIEW) para ordenar los empleados por sueldo de forma descendente y luego se hace un SELECT a la Vista de nombre Dat para obtener los primeros 7 empleados con el sueldo más alto. La Base de Datos Oracle es lo suficientemente inteligente para no ordenar todo el conjunto de empleados del departamento y solo obtener los primeros 7.

Te propongo que pruebes de inmediato estos ejemplos en tu Base de Datos con tus propias tablas,  PL-SQL Procedure y PL-SQL Function, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Procedures en Oracle.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio - Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos