Oracle/PLSQL: función ROWNUM

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: función ROWNUM

Este tutorial de Oracle explica cómo usar Oracle/PLSQL función ROWNUM Con sintaxis y ejemplos.

describir

La función ROWNUM de Oracle/PLSQL devuelve un número que representa el orden en que Oracle selecciona las filas de una tabla o tabla de combinación. La primera fila tiene un ROWNUM de 1, la segunda fila tiene un ROWNUM de 2 y así sucesivamente.

sintaxis

La sintaxis de la función ROWNUM en Oracle/PLSQL es:

ROWNUM

parámetro o parámetro

La función ROWNUM no tiene argumentos ni argumentos.

notas

  • La función ROWNUM a veces se denomina pseudocolumna en Oracle.

devolver los bienes

La función ROWNUM devuelve un valor numérico.

aplicar para

La función ROWNUM se puede utilizar en las siguientes versiones de Oracle/PLSQL:

  • Oráculo 12c, Oráculo 11g, Oráculo 10g, Oráculo 9i, Oráculo 8i

Ejemplo de DDL/DML

Si desea seguir este tutorial, obtenga DDL para crear las tablas y DML para completar los datos. ¡Entonces pruebe los ejemplos en su propia base de datos!

ejemplo

Veamos algunos ejemplos de la función ROWNUM de Oracle y exploremos cómo usar la función ROWNUM en Oracle/PLSQL.

En este ejemplo de ROWNUM, tenemos una tabla llamada clientes con los siguientes datos:

CUSTOMER_ID  LAST_NAME  FIRST_NAME  FAVORITE_WEBSITE
-----------  ---------  ----------  ---------------------
       4000  Jackson    Joe         www.prograrmaplus.com
       5000  Smith      Jane        www.digminecraft.com
       6000  Ferguson   Samantha    www.bigactivities.com
       7000  Reynolds   Allen       www.checkyourmath.com
       8000  Anderson   Paige
       9000  Johnson    Derek       www.prograrmaplus.com

Ahora demostremos cómo funciona la función ROWNUM seleccionando datos de la tabla de clientes. Ingrese la siguiente instrucción SQL en Oracle:

SELECT ROWNUM, customers.*
FROM customers
WHERE customer_id > 4500;

Estos son los resultados que deberías ver:

ROWNUM  CUSTOMER_ID  LAST_NAME  FIRST_NAME  FAVORITE_WEBSITE
------  -----------  ---------  ----------  ---------------------
     1         5000  Smith      Jane        www.digminecraft.com
     2         6000  Ferguson   Samantha    www.bigactivities.com
     3         7000  Reynolds   Allen       www.checkyourmath.com
     4         8000  Anderson   Paige
     5         9000  Johnson    Derek       www.prograrmaplus.com

En este ejemplo, la función ROWNUM devuelve 1 para el primer registro, 2 para el segundo registro y así sucesivamente. Dado que este es un ejemplo muy simple, parece que la función ROWNUM es simple de usar, pero es un poco más complicada de lo que piensa.

Compliquemos el ejemplo introduciendo una cláusula ORDER BY y ordenemos los resultados por apellido ascendente. Ingrese la siguiente instrucción SELECT en Oracle:

SELECT ROWNUM, customers.*
FROM customers
WHERE customer_id > 4500
ORDER BY last_name;

Deberías ver los siguientes resultados:

ROWNUM   CUSTOMER_ID   LAST_NAME   FIRST_NAME   FAVORITE_WEBSITE
------   -----------   ---------   ----------   ---------------------
     4          8000   Anderson    Paige
     2          6000   Ferguson    Samantha     www.bigactivities.com
     5          9000   Johnson     Derek        www.prograrmaplus.com
     3          7000   Reynolds    Allen        www.checkyourmath.com
     1          5000   Smith       Jane         www.digminecraft.com

Puede esperar que la primera fila del conjunto de resultados tenga un valor ROWNUM de 1, pero en este caso tiene un valor ROWNUM de 4. ¿Por qué es esto? Bueno, depende de cómo accede Oracle a las filas de la consulta. Por ejemplo, sus resultados pueden variar según muchos factores (es decir, el orden en que insertó datos en la tabla o si hay un índice en la tabla).

Debido a estos factores, existen formas correctas e incorrectas de usar la función ROWNUM.

Forma recomendada de usar ROWNUM

La forma más confiable de usar ROWNUM es usar una subconsulta para filtrar y ordenar los resultados, luego colocar la función ROWNUM en el SELECT externo. Ingrese el siguiente SELECCIONAR en Oracle:

SELECT ROWNUM, a.*
FROM (SELECT customers.*
      FROM customers
      WHERE customer_id > 4500
      ORDER BY last_name) a;

Estos son los resultados que deberías ver:

ROWNUM  CUSTOMER_ID  LAST_NAME  FIRST_NAME  FAVORITE_WEBSITE
------  -----------  ---------  ----------  ---------------------
     1         8000  Anderson   Paige
     2         6000  Ferguson   Samantha    www.bigactivities.com
     3         9000  Johnson    Derek       www.prograrmaplus.com
     4         7000  Reynolds   Allen       www.checkyourmath.com
     5         5000  Smith      Jane        www.digminecraft.com

Al usar la subconsulta de esta manera, obliga a ROWNUM a ordenar los registros correctamente, comenzando en 1 para el primer registro, comenzando en 2, y así sucesivamente.

Utilice ROWNUM para limitar los resultados

La función ROWNUM también es útil si desea limitar los resultados de la consulta. Por ejemplo, puede devolver los 2 primeros resultados. Ingrese la siguiente instrucción SQL en Oracle:

SELECT *
FROM (SELECT customers.*
      FROM customers
      WHERE customer_id > 4500
      ORDER BY last_name)
WHERE ROWNUM < 3;

Deberías ver los siguientes resultados:

CUSTOMER_ID  LAST_NAME  FIRST_NAME  FAVORITE_WEBSITE
-----------  ---------  ----------  ---------------------
       8000  Anderson   Paige
       6000  Ferguson   Samantha    www.bigactivities.com

En este ejemplo, la función ROWNUM devolverá los primeros 2 resultados porque queremos ROWNUM < 3.

Si queremos obtener los últimos 2 resultados, podemos cambiar el orden de clasificación de la subconsulta a last_name DESCIngrese la siguiente consulta en Oracle:

SELECT *
FROM (SELECT customers.*
      FROM customers
      WHERE customer_id > 4500
      ORDER BY last_name DESC)
WHERE ROWNUM < 3;

Estos son los resultados que deberías ver:

CUSTOMER_ID  LAST_NAME  FIRST_NAME  FAVORITE_WEBSITE
-----------  ---------  ----------  -------------------
       5000  Smith      Jane        www.digminecraft.com
       7000  Reynolds   Allen       www.checkyourmath.com

Ahora tenemos los 2 últimos resultados porque hemos ordenado last_name en orden descendente.

(Visited 8 times, 1 visits today)