46 - Indices (eliminar)


Problema:

Trabajamos con la tabla "empleados".
Eliminamos la tabla y la creamos:

  drop table empleados;

 create table empleados(
  legajo number (5),
  documento char(8),
  apellido varchar2(40),
  nombre varchar2(40)
 );

Creamos un índice único para el campo "legajo":

 create unique index I_empleados_legajo
  on empleados(legajo);

Agregamos una restricción "unique" sobre "legajo":

 alter table empleados
  add constraint UQ_empleados_legajo
  unique (legajo);

Verificamos que la restricción usa el índice creado anteriormente, no crea otro:

 select constraint_name, constraint_type, index_name
  from user_constraints
  where table_name='EMPLEADOS';

Agregamos una restricción "primary key" sobre "documento":

 alter table empleados
  add constraint PK_empleados_documento
  primary key(documento);

Verificamos que Oracle creó un índice para el campo "documento":

 select constraint_name, constraint_type, index_name
  from user_constraints
  where table_name='EMPLEADOS';

Consultamos todos los índices y sus tipos consultando "user_indexes":

 select index_name,uniqueness
  from user_indexes
  where table_name='EMPLEADOS';

Creamos un índice no único sobre "nombre":

 create index I_empleados_nombre
  on empleados(nombre);

Creamos un índice no único sobre "apellido":

 create index I_empleados_apellido
  on empleados(apellido);

Si intentamos eliminar un índice que utiliza una restricción Oracle no lo permite:

 drop index I_empleados_legajo;

Verificamos que tal índice es utilizado por una restricción:

 select constraint_name, constraint_type, index_name
  from user_constraints
  where index_name='I_EMPLEADOS_LEGAJO';

Eliminamos el índice "I_empleados_nombre":

 drop index I_empleados_nombre;

Corroboremos que se eliminó:

 select *from user_objects
  where object_type='INDEX';

No aparece en la lista.

Eliminamos la tabla:

 drop table empleados;

Verificamos que se eliminaron todos los índices establecidos sobre la tabla:

 select *from user_indexes where table_name='EMPLEADOS';

No aparece ninguno cuyo nombre de la tabla sea "empleados".

Lo verificamos nuevamente consultando el diccionario de todos los objetos:

 select *from user_objects
  where object_type='INDEX';

No aparecen los índices.

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table empleados;

 create table empleados(
  legajo number (5),
  documento char(8),
  apellido varchar2(40),
  nombre varchar2(40)
 );

 create unique index I_empleados_legajo
  on empleados(legajo);

 alter table empleados
  add constraint UQ_empleados_legajo
  unique (legajo);

 select constraint_name, constraint_type, index_name
  from user_constraints
  where table_name='EMPLEADOS';

 alter table empleados
  add constraint PK_empleados_documento
  primary key(documento);

 select constraint_name, constraint_type, index_name
  from user_constraints
  where table_name='EMPLEADOS';

 select index_name,uniqueness
  from user_indexes
  where table_name='EMPLEADOS';

 create index I_empleados_nombre
  on empleados(nombre);

 create index I_empleados_apellido
  on empleados(apellido);

 drop index I_empleados_legajo;

 select constraint_name, constraint_type, index_name
  from user_constraints
  where index_name='I_EMPLEADOS_LEGAJO';

 drop index I_empleados_nombre;

 select *from user_objects
  where object_type='INDEX';

 drop table empleados;

 select *from user_indexes where table_name='EMPLEADOS';

 select *from user_objects
  where object_type='INDEX';

Retornar