Si aprendes para que sirve la pseudo columna ROWID en los PL-SQL Packages en Oracle, podrás obtener la información que identifica a cada fila de una tabla de forma única, es decir, el valor del ROWID es un dato único que identifica a una fila, no pueden haber dos filas con el mismo ROWID en una tabla.
Sin embargo, puede ocurrir que las filas de diferentes tablas que están almacenadas en un mismo CLUSTER (sector del disco) tengan el mismo ROWID.
El valor del ROWID en los PL-SQL Packages en Oracle no cambia durante toda la vida útil de una fila, sin embargo, no se recomienda utilizar el valor del ROWID como clave principal de una tabla.
Si se elimina o se inserta una fila en la tabla, con los comandos DELETE e INSERT respectivamente, el ROWID de la fila puede cambiar, por ejemplo, si se elimina una fila, Oracle puede reasignar el ROWID de la fila eliminada a una nueva fila insertada mas tarde, por esa razón no se puede usar el ROWID como llave primaria en los PL-SQL Packages en Oracle.
/* PL-SQL Packages en Oracle */
El valor del ROWID tiene los siguientes usos:
– Es el medio más rápido de acceso a una fila en la tabla.
– Muestra información de como se almacena una fila en la tabla.
– Es un identificador único de la fila en la tabla.
La pseudo columna ROWID de los PL-SQL Packages en Oracle se puede utilizar en el comando SELECT y en la cláusula WHERE de una consulta. El ROWID no es una pseudo columna almacenada en la Base de Datos Oracle, por lo tanto, no se puede insertar, actualizar o eliminar su valor.
Revisemos algunos ejemplos de cómo se puede utilizar la pseudo columna ROWID en los PL-SQL Packages en Oracle.
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Ejemplo #1: Supone que deseas saber el valor ROWID de la tabla de empleados para un departamento en particular, veamos como se hace:
/* PL-SQL Packages en Oracle */
Select ROWID, emp.id_empleado, emp.nombre
From t_empleado emp
Where emp.id_departamento = pin_id_departamento;
Este ejemplo muestra el siguiente resultado:
/* PL-SQL Packages en Oracle */
ROWID id_empleado nombre
0000000F.0000.0003 101 OSCAR
0000000F.0002.0003 105 JONAS
0000000F.0005.0003 108 AMALIA
Ejemplo #2: Supone ahora que debes actualizar un dato accesando la tabla por su ROWID, veamos como se hace:
/* PL-SQL Packages en Oracle */
Update t_empleado Set nombre= ‘AMELIA’
Where ROWID = (select rowid from t_empleado where id_empleado = 108);
En este ejemplo se actualiza el nombre del empleado buscando el registro por el ROWID.
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 Packages 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 Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL/SQL Packages 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”
Resolvio muy bien mi duda…
Muy buena explicación.
Saludos.
Hola Claudia, gracias por comunicarte y por tu excelente comentario, me da mucho gusto que el artículo te haya sido de utilidad, seguire escribiendo mas posts con información util para todos.
PD: Ya obtuviste mi reporte gratuito sobre “Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo has hecho reclama el tuyo haciendo clic aquí:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Roberto;
gracias por tus aportes, gente como tú hace que el aprendizaje sea mucho más entretenido.
tengo una consulta:
Se puede usar el rowid como max(rowid) y min(rowid), tengo una tabla que tiene 2 registros y en la pk una secuencia que los diferencia, asi:
registro1: 1234 – 1 y el otro registro 1234-2 y quiero seleccionar el registro con secuencia 2, es decir el registro 1234-2 y hago esto:
select * from TABLA WHERE ID=1234 and rowid in (select min(rowid) from TABLA WHERE ID=1234)
Gracias por tu atención.
Luis Cabrera
Hola Luis, gracias por comunicarte, para este caso no es conveniente usar el rowid ya que su valor puede cambiar, en cambio un id nunca cambiara en el tiempo, para resolver el problema que presentas puedes hacer algo como esto:
select * from TABLA t1
WHERE t1.ID=1234
and t1.campo_secuencia = (select max(t2.campo_secuencia) from TABLA t2 WHERE t2.ID = t1.ID);
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
https://dominatuspackagesen0racle.com/
Muchas gracias,lo aprendido vale oro en su página.
Hola Galo, gracias por comunicarte y por tu excelente comentario, para que sigas aprendiendo en estos momentos estoy presentando unos vídeos gratuitos avanzados donde muestro como crear un Select Compuesto por Múltiples Tablas, para verlos puedes acceder desde el siguiente enlace https://dominatuspackagesen0racle.com/select/video_1/, no olvides dejarme tus comentarios, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
TE AGRADEZCO..!!
FUE DE GRAN AYUDA, ESTABA HACIENDO UNA GRILLA CON KENDOUI Y ME AYUDO REBARBARO, AUN MI PAGINA WE , NO ESTÁ LISTA, PERO SERÁ DE GRAN AYUDA EN EL FUTURO
GRACIAS
Hola Steven, gracias por comunicarte y por tu comentario, me da mucho gusto que la información te sea de utilidad, si te gusto este artículo comparte este enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información, gracias.
PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Gracias, interesante la publicación :). Una consulta quería saber como puedo recuperar los registros de una tabla [X] según fueron insertados en la base de datos, el problema que tengo es que la tabla no tiene un campo fecha ni un número de secuencia por la cual pueda ordenar. Saludos.
Hola Eva, gracias por comunicarte y por tu comentario, si no tienes un campo que te indique como se insertaron los registros, la unica forma es obtener los registros de forma secuencial, es decir, tal cual en el orden como fueron ingresados, para esto solo tienes que hacer un select * from tu_tabla sin aplicar nungun order by, de esta forma obtienes los registros en orden secuencial desde el primero al ultimo registro ingresado, gracias.
PD: Si te han gustado los artículos comparte el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
https://dominatuspackagesen0racle.com/
Por favor su ayuda necesito, sacar registro por registro de una tabla para luego enviar con parámetros(codigoID) en un procedimiento para que internamente realiza una verificacacion que se encuentra en el procedimiento ya realizado.
Lo importante como puedo seleccionar solamente un registro de una tabla. por favor su ayuda.
Hola Renato, gracias por comunicarte, para lograr sacar cada registro de una tabla debes usar un cursor, en el siguiente artículo explico como se debe hacer:
https://dominatuspackagesen0racle.com/como-se-debe-utilizar-un-cursor-en-tus-pl-sql-procedures-en-oracle.html
PD: Ya pudiste ver mi libro reporte sobre ‘Cómo Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aun no lo tienes en tus manos puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.