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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
Partager