¿Por qué utilizar ROWID en Oracle?


La mejor respuesta

Así como la dirección de su casa identifica de forma única el lugar donde vive, un de Oracle ROWID identifica de forma única dónde reside una fila en el disco. La información en un ROWID le da a Oracle todo lo que necesita para encontrar su fila, el número de disco, el cilindro, el bloque y el desplazamiento en el bloque.

Valores de Rowid tienen varios usos importantes:

  • Son la forma más rápida de acceder a una sola fila.
  • Pueden mostrarle cómo se almacenan las filas en una tabla.
  • Son identificadores únicos para las filas de una tabla.

No debe utilizar Rowid como clave principal de una tabla. Si elimina y vuelve a insertar una fila con las utilidades de importación y exportación, por ejemplo, su identificador de fila puede cambiar. Si elimina una fila, Oracle puede reasignar su identificador de fila a una nueva fila insertada más tarde.

Aunque puede usar la pseudocolumna Rowid en el Select y Donde cláusula de una consulta, estos valores de pseudocolumna no se almacenan realmente en la base de datos. No puede insertar, actualizar o eliminar un valor de la pseudocolumna Rowid.

Respuesta

ROWID es la ubicación física de una fila. Suponga que tiene una tabla sin claves primarias. por lo que esta tabla puede tener filas duplicadas. ¿Cómo eliminaría filas duplicadas pero conservaría exactamente una de ese tipo?

Oracle proporciona ROWID como una especie de sustituto de la clave principal. Puede escribir una consulta anidada que sea de tipo correlacionado [(agrupar por todas las columnas en la fila y tomar MIN (ROWID) en cada grupo en la consulta interna, para cada grupo eliminar las otras filas en el grupo en consulta externa)] ..

por ejemplo:

SQL> select * from employees;

SSN NAME

---------- ----------

1 john

1 john

2 john

2 john

10 sam

11 beth

11 beth

12 beth

8 rows selected.

SQL> delete from employees where ROWID NOT IN (select min(ROWID) from employees

group by ssn,name);

2 rows deleted.

SQL> select * from employees;

SSN NAME

---------- ----------

1 john

2 john

2 john

10 sam

11 beth

12 beth

6 rows selected.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *