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