我不是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
是否对索引进行约束检查。请分享您的想法。
答案 0 :(得分:1)
关于索引的约束检查是什么意思"?我不熟悉这个概念。在任何情况下:此查询将数据库的所有者(架构,用户)和该架构中的表名称(由该所有者拥有)作为输入。它查找该表上的所有唯一索引(强制唯一值的索引),包括例如主键的索引,索引所在的列或列集,以及索引是按升序还是按降序排序。它是一个相对标准的查询,用于查找模式中表上唯一索引的信息。
例如,大多数Oracle安装都附带标准样本架构(所有者)HR,它包含多个表,其中一个表名为EMPLOYEES。此表具有主键,员工ID和员工电子邮件上的其他唯一键。以下是查询,owner
和name
分别硬编码为'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