2009-12-14 17 views
5

Digamos que tengo un programa que busca en una base de datos para que las columnas lo modifiquen, como parte de un proceso de conversión de base de datos.¿Cómo puedo encontrar todos los índices funcionales en una columna en Oracle

Si intento de alterar una columna con un índice funcional definido da el siguiente error:

ORA-30556: functional index is defined on the column to be modified 

Looking up the ORA code, la solución es "Drop el índice funcional antes de intentar modificar la columna."

¡Estupendo! Entonces, ¿cómo puedo encontrar todos los índices funcionales en esa columna?

La vista user_ind_columns parece un buen comienzo, pero los índices funcionales tienen cosas como "SYS_NC00042 $" en su columna COLUMN. Mirando alrededor de las otras user_ vistas, no veo nada obvio. ¿Me estoy perdiendo de algo?

¿O estoy haciendo esto de la manera incorrecta?

Respuesta

11

La tabla user_ind_expressions describe expresiones de índices basados ​​en funciones.

Oracle 11.2 link

+0

que estaba esperando sólo el nombre de la columna, pero supongo que el uso de 'como '% COLUMN_NAME%' tiene una muy razonables baja probabilidad de falsa positivos (que de todos modos no son una tragedia). –

+0

No sé de una mejor manera. – Khb

+1

El enlace ya no es válido –

5

mirada en la columna de la INDEX_TYPE de USER_INDEXES:

select table_name, index_name, index_type 
from user_indexes 
where index_type like 'FUNCTION%' 
order by table_name, index_name 

TABLE_NAME      INDEX_NAME      INDEX_TYPE     
------------------------------ ------------------------------ --------------------------- 
SOME_TABLE      SOME_TABLE_FUNC_INDEX   FUNCTION-BASED NORMAL 
+0

Eso le muestra los índices funcionales en la tabla, pero no ayuda a identificar qué índices, si los hay, hacen referencia a una columna en particular. –

Cuestiones relacionadas