в Oracle, как выбрать уникальные совместные индексы для таблицы вместе с затронутыми столбцами

Если я выполню этот запрос:

select * 
from SYS.ALL_INDEXES
where table_name='MY_TABLE'
and owner = 'ME'
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME;

Я получу все индексы для таблицы MY_TABLE. Один из них — уникальный индекс, влияющий на три столбца, который я могу проверить в SQL Developer.

Однако по результатам моего запроса я не могу сказать, какой индекс влияет на какие столбцы и сколько столбцов затронуто.

Как мне изменить свой запрос, чтобы получить только уникальный индекс, затрагивающий более одного столбца вместе со списком этих столбцов?


person mnowotka    schedule 17.09.2013    source источник
comment
взгляните на all_ind_columns   -  person schurik    schedule 17.09.2013


Ответы (2)


Попробуйте так,

SELECT i.index_name,  
       c.column_position,  
       c.column_name,  
       i.uniqueness
  FROM sys.all_indexes i, 
       sys.all_ind_columns c  
 WHERE i.table_name  = 'MY_TABLE'  
   AND i.owner       = 'ME'  
   AND i.uniqueness  = 'UNIQUE'
   AND i.index_name  = c.index_name  
   AND i.table_owner = c.table_owner  
   AND i.table_name  = c.table_name  
   AND i.owner       = c.index_owner
   AND c.index_name IN (SELECT index_name FROM sys.all_ind_columns WHERE column_position = 2);
person Dba    schedule 18.09.2013

Вам нужно присоединиться к sys.all_ind_columns, чтобы получить столбцы в индексе.

select * 
from SYS.ALL_INDEXES
inner join SYS.ALL_IND_COLUMNS
on SYS.ALL_INDEXES.owner = SYS.ALL_IND_COLUMNS.owner
and SYS.ALL_INDEXES.index_name = SYS.ALL_IND_COLUMNS.index_name
where table_name='MY_TABLE'
and owner = 'ME'
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME;
person Brian    schedule 17.09.2013