CREATE INDEX dans un bloc IF ou EXCEPTION
Hello à tous,
Habitué au T-SQL (j'ai administré des serveurs MS-SQL et développé en T-SQL pendant des années), je débute avec le PL/SQL.
Je suis en train d'écrire un script qui devra vérifier la présence d'un index spatial et le créer s'il n'existe pas encore.
Voici où j'en suis :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| DECLARE FEATURE_NAME VARCHAR2(100); INDEX_EXISTS INTEGER;
BEGIN
--W_AANSLUITNG_LN
FEATURE_NAME := 'W_AANSLUITNG_LN';
INDEX_EXISTS := 0;
BEGIN
SELECT 1 INTO INDEX_EXISTS
FROM USER_INDEXES T INNER JOIN USER_IND_COLUMNS C ON T.INDEX_NAME = C.INDEX_NAME AND T.TABLE_NAME = C.TABLE_NAME WHERE T.TABLE_NAME = 'B$' || FEATURE_NAME
AND T.INDEX_TYPE = 'DOMAIN' AND T.ITYP_NAME = 'SPATIAL_INDEX' AND C.COLUMN_NAME = 'G3E_GEOMETRY';
EXCEPTION
WHEN NO_DATA_FOUND THEN
SYS.DBMS_OUTPUT.PUT_LINE('CREATE INDEX FOR ' || FEATURE_NAME);
END;
IF INDEX_EXISTS = 1 THEN
SYS.DBMS_OUTPUT.PUT_LINE('INDEX ALREADY EXISTS FOR ' || FEATURE_NAME);
END IF;
END; |
Ceci fonctionne très bien mais bien sûr, à part un output dans le dbms, ça ne fait rien. L'idée était donc de remplacer l'output dans le bloc d'exception par l'instruction CREATE INDEX qui va bien. Mais ce n'est apparemment pas permis.
J'ai voulu ruser en assignant 0 à ma variable dans le bloc d'exception (même si elle vaut déjà 0 normalement) et faire le CREATE INDEX dans la branche ELSE du bloc IF mais ce n'est pas permis non plus.
Je viens donc chercher un peu d'aide face à ce problème qui, je pense, ne devrait pas être compliqué pour un DBA oracle averti.
Bien sûr, ce petit bout de script va être dupliqué quelques fois car cette vérification/création doit être faite pour 17 tables. L'idée étant donc d'avoir 1 script qui fait tout d'un coup plutôt que devoir tout faire manuellement et risquer de se tromper.
Merci d'avance pour les suggestions.