Leí este ejemplo aquí Luego decidí traducirlo para los hispanohablantes. Lo probé en Oracle 11.2.0.2.7. Es muy fácil crear y borrar un índice normal: 
SQL> conn andrew/reid
Connected.
SQL> alter session set nls_language = 'SPANISH'
  2  /
Sesion modificada.
SQL> create table andrews_table
  2  (andrews_column number)
  3  /
Tabla creada.
SQL> create index andrews_index on
  2  andrews_table(andrews_column)
  3  /
Indice creado.
SQL> drop index andrews_index
  2  /
Indice borrado.
SQL>
Pero si un índice sea creado automáticamente para ser empleado con un constraint, no se puede borrarlo. Para empezar, ponemos un constraint en nuestra tabla: 
SQL> alter table andrews_table
  2  add constraint andrews_constraint
  3  unique(andrews_column)
  4  /
Tabla modificada.
SQL>
Se puede ver el constraint en user_tables: 
SQL> select constraint_name
  2  from user_constraints
  3  where table_name = 'ANDREWS_TABLE'
  4  /
CONSTRAINT_NAME
------------------------------
ANDREWS_CONSTRAINT
SQL>
El constraint tiene un índice con el mismo nombre: 
SQL> select index_name
  2  from user_indexes
  3  where table_name = 'ANDREWS_TABLE'
  4  /
INDEX_NAME
------------------------------
ANDREWS_CONSTRAINT
SQL>
Pero no es posible borrarlo: 
SQL> drop index andrews_constraint
  2  /
drop index andrews_constraint
           *
ERROR en linea 1:
ORA-02429: no se puede borrar el indice utilizado para
aplicar la clave unica/primaria
SQL>
Para borrar el índice, es necesario borrar el propio constraint: 
Luego el índice desaparece automáticamente y no es necesario borrarlo:
SQL> alter table andrews_table
  2  drop constraint andrews_constraint
  3  /
Tabla modificada.
SQL>
Luego el índice desaparece automáticamente y no es necesario borrarlo:
SQL> drop index andrews_constraint
  2  /
drop index andrews_constraint
           *
ERROR en linea 1:
ORA-01418: el indice especificado no existe
SQL>
Muy bueno gracias por el aporte
ResponderEliminarA hoy año 2020 muchas Gracias!
ResponderEliminar