Bonjour à tous.

Etant débutant sous oracle, je dois réaliser un script de normalisation des noms d'index.

Pour ce faire, j'ai écrit le script suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SET SERVEROUTPUT ON;
Declare
  idxName Varchar2(30);
Begin
  SELECT ui.index_name into :idxName from user_indexes ui, user_ind_columns uic where ui.index_name = uic.index_name and ui.table_name = uic.table_name and ui.table_name = 'MA_TABLE' and uic.column_name = 'MA_COLONNE';
  -- Si je suis la c'est qu'un index existe
    Execute Immediate 'drop INDEX '||:idxName ;
    Execute Immediate 'CREATE INDEX IDX_1 ON MA_TABLE (MA_COLONNE)' ;
  Exception WHEN NO_DATA_FOUND then
  begin
    Execute Immediate 'CREATE INDEX IDX_1 ON MA_TABLE(MA_COLONNE)' ;
  end;
End;
Lorsque je teste ce script, j'ai le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
La variable attachée (bind variable) "idxName" est NON DECLAREE
bloc anonyme terminé
J'ai essayé plusieurs syntaxes, notamment celle-ci
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
 
SET SERVEROUTPUT ON;
Declare
  idxName Varchar2(30);
  sqlString Varchar2(255) := 'drop INDEX :indexName';
Begin
  SELECT ui.index_name into :idxName from user_indexes ui, user_ind_columns uic where ui.index_name = uic.index_name and ui.table_name = uic.table_name and ui.table_name = 'MA_TABLE ' and uic.column_name = 'MA_COLONNE';
  -- Si je suis la c'est qu'un index existe
    Execute Immediate sqlString USING :idxName ;
    Execute Immediate 'CREATE INDEX IDX_1 ON MA_TABLE (MA_COLONNE)' ;
  Exception WHEN NO_DATA_FOUND then
  begin
    Execute Immediate 'CREATE INDEX IDX_1 ON MA_TABLE (MA_COLONNE)' ;
  end;
End;
Mais rien n'y fait. (même en enlevant les : dans le dernier cas.

J'ai toujours le même message d'erreur.

Pourriez-vous éclairer ma lanterne et m'indiquer ou est mon erreur??

Par avance merci.