2

このクエリを実行すると:

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

テーブル MY_TABLE のすべてのインデックスを取得します。そのうちの 1 つは、SQL Developer で確認できる 3 つの列に影響する一意のインデックスです。

ただし、クエリ結果からは、どのインデックスがどの列に影響を与え、何列が影響を受けるかわかりません。

クエリを変更して、複数の列に影響を与える一意のインデックスのみを取得し、その列のリストを取得するにはどうすればよいですか?

4

2 に答える 2

1

このようにしてみて、

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);
于 2013-09-18T03:52:57.050 に答える
0

インデックス内の列を取得するには、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;
于 2013-09-17T19:18:51.030 に答える