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:
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>