2009-12-14 11 views
5

Powiedzmy, że mam program, który przeszukuje bazę danych w celu zmodyfikowania kolumn, w ramach procesu konwersji bazy danych.Jak znaleźć wszystkie indeksy funkcjonalne w kolumnie w Oracle

Jeśli próbuje zmieniać kolumnę o wskaźniku funkcjonalnej określonego daje następujący komunikat:

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

Looking up the ORA code roztwór jest „Drop indeks funkcjonalny przed przystąpieniem do modyfikacji kolumny”.

Świetnie! Jak więc znaleźć wszystkie indeksy funkcjonalne w tej kolumnie?

Widok user_ind_columns wygląda na dobry początek, ale funkcjonalne indeksy mają takie rzeczy jak "SYS_NC00042 $" w ich kolumnie COLUMN. Rozglądając się po innych widokach user_, nie widzę niczego oczywistego. Czy czegoś brakuje?

Czy podchodzę do tego w niewłaściwy sposób?

Odpowiedz

11

Tabela user_ind_expressions opisuje wyrażenia indeksów opartych na funkcjach.

Oracle 11.2 link

+0

miałem nadzieję tylko nazwa kolumny, ale przypuszczam, używając 'like„% COLUMN_NAME%”ma rozsądnych niskie prawdopodobieństwo fałszywy pozytywy (które tak czy inaczej nie są tragedią). –

+0

Nie znam lepszego sposobu. – Khb

+1

Link nie jest już ważny –

5

Spójrz na kolumnie INDEX_TYPE z 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

To pokazuje wszystkie funkcjonalne indeksy w tabeli, ale nie pomaga w zidentyfikowaniu, które indeksy, jeśli w ogóle, odnoszą się do konkretnej kolumny. –

Powiązane problemy