2017-05-08 23 views
-4

Ich bin kein DBA und daher, diese Frage zu stellen. Kann mir bitte jemand sagen, was die Bedeutung der unten erwähnten Abfrage ist:Orakel eindeutigen Index auf Tabelle in Bezug auf einen Besitzer

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 

Ist es eine Art von Constraint-Check in Bezug auf Indizes. Bitte teilen Sie Ihre Gedanken.

Antwort

1

Was meinen Sie mit "Constraint-Check in Bezug auf Indizes"? Ich kenne das Konzept nicht. In jedem Fall: Diese Abfrage nimmt als Eingaben einen Eigentümer (Schema, Benutzer) der Datenbank und den Namen einer Tabelle in diesem Schema (im Besitz dieses Eigentümers). Es findet alle eindeutigen Indizes (Indizes, die eindeutige Werte erzwingen) für diese Tabelle, einschließlich z. B. den Index für den Primärschlüssel und die Spalte oder Spaltengruppe, in der der Index aktiviert ist, und ob der Index aufsteigend oder absteigend sortiert ist. Es handelt sich um eine relativ standardmäßige Abfrage zum Ermitteln von Informationen zu eindeutigen Indizes für eine Tabelle in einem Schema.

Zum Beispiel sind die meisten Oracle-Installationen mit dem Standard-Musterschema (Eigentümer) HR ausgestattet, das über mehrere Tabellen verfügt, darunter eine mit dem Namen EMPLOYEES. Diese Tabelle enthält einen Primärschlüssel, die Mitarbeiter-ID und einen zusätzlichen eindeutigen Schlüssel für Mitarbeiter-E-Mails. Hier ist die Abfrage, mit owner und name fest codiert auf bzw. 'EMPLOYEES', und der Ausgang. Beachten Sie, dass derjenige, der die Abfrage geschrieben hat, keine Aliasnamen für die letzten beiden Spalten in SELECT angegeben hat. Daher sieht die Ausgabe aus diesem Grund etwas hässlich aus.

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 
Verwandte Themen