2017-05-08 37 views
-4

我不是DBA,因此提出這個問題。有人可以告訴我什麼是下面提到的查詢的意義:oracle對所有者的唯一索引

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

你是什麼意思的「關於索引的約束檢查」?我不熟悉這個概念。在任何情況下:此查詢都將數據庫的所有者(模式,用戶)和該模式中的表的名稱(該所有者擁有)作爲輸入。它找到該表上的所有唯一索引(實施唯一值的索引),包括例如主鍵的索引,索引所在的列或列集以及索引是按升序還是降序排序。這是一個相對標準的查詢,用於查找有關架構中的表上唯一索引的信息。

例如,大多數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