Je souhaite écrire une instruction select pour afficher le nom_index, le nom_table, le propriétaire_table et l'unicité existant dans le dictionnaire de données pour les index utilisateur de la table. Toute aide est la bienvenue. Mon problème est que je n'ai pas pu trouver comment afficher un nom d'index et un propriétaire de table.
SELECT owner, table_name FROM dba_tables;
Cela en donne le plus.
Selon la docs , vous pouvez simplement faire:
select INDEX_NAME, TABLE_OWNER, TABLE_NAME, UNIQUENESS from USER_INDEXES
ou
select INDEX_NAME, TABLE_OWNER, TABLE_NAME, UNIQUENESS from ALL_INDEXES
si vous voulez tous les index ...
select index_name, column_name
from user_ind_columns
where table_name = 'NAME';
OU utilisez ceci:
select TABLE_NAME, OWNER
from SYS.ALL_TABLES
order by OWNER, TABLE_NAME
Et pour les index:
select INDEX_NAME, TABLE_NAME, TABLE_OWNER
from SYS.ALL_INDEXES
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME
Ce qui suit peut aider à vous donner envie dont vous avez besoin:
SELECT
index_owner, index_name, table_name, column_name, column_position
FROM DBA_IND_COLUMNS
ORDER BY
index_owner,
table_name,
index_name,
column_position
;
Pour mon cas d'utilisation, je voulais les noms de colonne et leur ordre dans les index (pour pouvoir les recréer dans un moteur de base de données différent après la migration vers AWS). Voici ce que j'ai utilisé, au cas où il serait utile à quelqu'un d'autre:
SELECT
index_name, table_name, column_name, column_position
FROM DBA_IND_COLUMNS
WHERE
INDEX_OWNER = 'FOO'
AND TABLE_NAME NOT LIKE '%$%'
ORDER BY
table_name,
index_name,
column_position
;