繁体   English   中英

在Oracle中,如何为表以及受影响的列选择唯一的索引

[英]in Oracle, how to select unique together indexes for table along with affected columns

如果执行此查询:

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中进行检查。

但是,从查询结果中,我无法确定哪个索引会影响哪些列以及受影响的列数。

我应该如何更改查询以仅获取影响多于一列的唯一索引以及该列的列表?

您需要加入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;

这样尝试

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM