表上的oracle唯一索引与所有者有关

时间:2017-05-08 18:29:46

标签: sql oracle oracle11g

我不是DBA因此,问这个问题。有人可以告诉我下面提到的查询有什么意义:

select i.index_name, 
        NVL(c.column_name,' '), 
        NVL(c.DESCEND, 'ASC') 
    from all_indexes i, all_ind_columns c 
    where i.index_name = c.index_name 
    and (i.INDEX_TYPE = 'NORMAL' or i.INDEX_TYPE = 'FUNCTION-BASED NORMAL') 
    and i.table_name = name 
    and i.owner = c.index_owner 
    and i.table_owner = owner
    and c.table_name = name
    and c.table_owner = owner
    and i.uniqueness =  'UNIQUE' 
    order by c.index_name, c.column_position

是否对索引进行约束检查。请分享您的想法。

1 个答案:

答案 0 :(得分:1)

关于索引的约束检查是什么意思"?我不熟悉这个概念。在任何情况下:此查询将数据库的所有者(架构,用户)和该架构中的表名称(由该所有者拥有)作为输入。它查找该表上的所有唯一索引(强制唯一值的索引),包括例如主键的索引,索引所在的列或列集,以及索引是按升序还是按降序排序。它是一个相对标准的查询,用于查找模式中表上唯一索引的信息。

例如,大多数Oracle安装都附带标准样本架构(所有者)HR,它包含多个表,其中一个表名为EMPLOYEES。此表具有主键,员工ID和员工电子邮件上的其他唯一键。以下是查询,ownername分别硬编码为'HR''EMPLOYEES'以及输出。请注意,编写查询的人没有给SELECT中的最后两列提供别名,因此输出看起来有点难看。

select i.index_name, 
        NVL(c.column_name,' '), 
        NVL(c.DESCEND, 'ASC') 
    from all_indexes i, all_ind_columns c 
    where i.index_name = c.index_name 
    and (i.INDEX_TYPE = 'NORMAL' or i.INDEX_TYPE = 'FUNCTION-BASED NORMAL') 
    and i.table_name = 'EMPLOYEES' 
    and i.owner = c.index_owner 
    and i.table_owner = 'HR'
    and c.table_name = 'EMPLOYEES'
    and c.table_owner = 'HR'
    and i.uniqueness =  'UNIQUE' 
    order by c.index_name, c.column_position
;

INDEX_NAME     NVL(C.COLUMN_NAME,'')  NVL(C.DESCEND,'ASC')
-------------  ---------------------  --------------------
EMP_EMAIL_UK   EMAIL                  ASC
EMP_EMP_ID_PK  EMPLOYEE_ID            ASC