2010-06-10 12 views
26

Zanotowałem następującą kwerendę, która będzie zawierać nazwę indeksu i jego kolumny dla danej tabeli:jak znaleźć wszystkie indeksy i ich kolumny tabel, widoków i synonimów Oracle

select 
b.uniqueness, a.index_name, a.table_name, a.column_name 
from all_ind_columns a, all_indexes b 
where a.index_name=b.index_name 
and a.table_name = upper('table_name') 
order by a.table_name, a.index_name, a.column_position; 

chcę zmodyfikować tak, że jeśli przejdę w view lub synonym również to działa. Nasz system ma odmiany widoków, synonimów, więc bardzo pomocne będzie posiadanie jednego zapytania, do którego mogę podać nazwę (niezależnie od tego, czy jest to synonim widoku lub tabela), i wyplułoby indeksy i ich kolumny.

Odpowiedz

13

Twoje zapytanie powinno działać zarówno w przypadku synonimów, jak i tabel. Wydaje się jednak, że oczekujesz indeksów na widokach, gdzie nie ma takich indeksów. Może to zmaterializowane poglądy?

+0

Przypuszczam, że chce indeksów z tabel zależnych za widok – dpbradley

+1

W tym przypadku może to być trudne, ale trzeba pracować z ALL_DEPENDENCIES i od widoku mogą być oparte na inny widok (inne widoki), prawdopodobnie wymaga również zapytania hierarchicznego (CONNECT BY). –

+0

Synonimy mogą również wskazywać na widoki. –

0

SELECT * FROM user_cons_columns WHERE table_name = 'table_name';

+2

Działa to tylko dla indeksów utworzonych jako część ograniczenia. –

Powiązane problemy