Cómo utilizar y diferenciar el rowid y rownum de Oracle

Oracle provee de muchas funcionalidades, entre ellas el rowid y rownum, ambas a nivel de fila.

Rowid

El rowid es una cadena de texto alfanumérica que** identifica de forma única cada fila de cada tabla**.

Se recupera de la siguiente manera:

SELECT rowid, p.* FROM productos p

Como verás, es una cadena de tipo: AAAHuDAAg+AABIJAAB

Además, podemos usarla como columna clave para realizar UPDATE

UPDATE productos SET precio = precio * 1.10 WHERE rowid = ?

O en un DELETE:

DELETE FROM productos WHERE rowid = ?

Hay que recordar que al ser una cadena de texto alfanumérica, no sirve para ordenar ni paginar ni considerarlos como códigos numerados consecutivamente.

Rownum

El rownum es un número entero consecutivo generado en ejecución y por orden de aparición de los registros, haya ORDER BY o no.

SELECT rownum, nombre FROM empleados ORDER BY fecha_nacimiento DESC

Ejemplo de resultado con rownum

rownumNOMBRE
1Pablo
2Juan
3Alberto
Un uso frecuente es incrustar el `rownum` dentro de una subconsulta con unos determinados criterios o cálculos y con `ORDER BY` propio, y a partir de ahí en la consulta que la contiene ordenar a través del `rownum`.

Para hacer esto último, hay que poner un alias al rownum de la subconsulta, si no se calculará una segunda columna rownum.

Un ejemplo de esto último podría ser obtener los 3 países europeos con mejores puntuaciones con el nombre de sus participantes:

SELECT participantes.orden, paises.titulo, participantes.nombre 
FROM 
(SELECT rownum AS orden, nombre, pais, aciertos-faltas AS calculo 
FROM participantes 
ORDER BY calculo DESC) participantes, paises 
WHERE participantes.pais = paises.codigo 
AND paises.continente = 'EUROPA' AND rownum <= 3

Deja cualquier comentario o duda que puedas tener

David Burgos

Read more posts by this author.