2009-03-12 8 views
14

J'écris un script de mise à niveau de schéma pour un produit qui dépend d'une base de données Oracle. Dans un domaine, j'ai besoin de créer un index sur une table - si cet index n'existe pas déjà. Existe-t-il un moyen facile de vérifier l'existence d'un index dont je connais le nom dans un script Oracle?Comment rechercher un index dans Oracle

Il serait semblable à cela dans SQL Server: SINON EXISTE (SELECT * FROM SYSINDEXES OU NOM = 'MYIndex') // Puis créer mon MYIndex

Répondre

30

select count (*) à partir USER_INDEXES où index_name = 'myIndex'

sqlplus ne prendra pas en charge IF ..., vous devrez donc utiliser des blocs PL/SQL anonymes, ce qui signifie EXECUTE IMMEDIATE pour faire du DDL. Edit: comme indiqué, Oracle stocke les noms d'objets non cotés en majuscules.

+1

Sauf indication contraire, les objets de base de données (index compris) sont stockés dans upperdcase. Donc, si vous créez un index CREATE INDEX myIndex, dans USER_INDEXES, il sera stocké sous MYINDEX. Et Oracle (par défaut) ne fera pas de correspondance insensible à la casse. –

+1

juste en plus de cette réponse: si vous avez besoin de vérifier si un index existe dans un autre schéma, interrogez ALL_INDEXES au lieu d'utiliser USER_INDEXES. La vérification de USER_INDEXES ne fonctionne pas avec un "ALTER SESSION SET CURRENT_SCHEMA = XYZ", vous devrez toujours interroger les index pour l'utilisateur actuellement connecté. – SaschaM78

Questions connexes