2009-12-14 9 views
5

Dire che ho un programma che cerca un database per le colonne da modificare, come parte di un processo di conversione del database.Come trovare tutti gli indici funzionali su una colonna in Oracle

Se tento di modificare una colonna con un indice funzionale definito dà il seguente errore:

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

Looking up the ORA code, la soluzione è a "Eliminare l'indice funzionale prima di tentare di modificare la colonna."

Grande! Quindi, come faccio a trovare tutti gli indici funzionali su quella colonna?

La vista user_ind_columns sembra un buon inizio, ma gli indici funzionali hanno cose come "SYS_NC00042 $" nella loro colonna COLUMN. Guardando le altre user_ visualizzazioni, non vedo nulla di ovvio. Mi sto perdendo qualcosa?

O sto andando in questo modo completamente sbagliato?

risposta

11

La tabella user_ind_expressions descrive espressioni di indici basati su funzioni.

Oracle 11.2 link

+0

speravo in solo il nome della colonna, ma suppongo usando 'come '% COLUMN_NAME%' ha un resonably bassa probabilità di falso positivi (che non sono comunque molto tragici). –

+0

Non conosco un modo migliore. – Khb

+1

Il collegamento non è più valido –

5

osservare la colonna INDEX_TYPE di 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

Questo mostra gli indici funzionali sulla tabella, ma non aiuta a identificare quali indici, se presenti, fanno riferimento a una particolare colonna. –

Problemi correlati