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
rownum | NOMBRE |
---|---|
1 | Pablo |
2 | Juan |
3 | Alberto |
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