Bonjour,

Mon problème est que je n'arrive pas à faire appel à des instructions DDL (avec EXECUTE IMMEDIATE) à partir d'une procédure stockée pour modifier les tables d'un schéma qui est différent du schéma propriétaire de la procédure.

Exemple de code :

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
21
22
23
24
25
26
27
CREATE OR REPLACE PROCEDURE USER1.ajout_column (
   vtable    VARCHAR2,
   vzone     VARCHAR2,
   vtype     VARCHAR2
)
IS
   table_chg    VARCHAR2 (20):= vtable;
   zone_add     VARCHAR2 (20):= vzone;
   type_add     VARCHAR2 (20):= vtype;
 
BEGIN
 
   -- --------------------------------
   -- Modification dans le schema USER1
   -- --------------------------------
 
   EXECUTE IMMEDIATE    'ALTER TABLE USER1.' || table_chg ||
                        ' ADD (' || zone_add || ' ' || type_add || ')';
 
   -- ---------------------------------
   -- Modification dans le schema USER2
   -- ---------------------------------
 
   EXECUTE IMMEDIATE    'ALTER TABLE USER2.' || table_chg ||
                        ' ADD (' || zone_add || ' ' || type_add || ')';
 
END;
Le message d'erreur est celui-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SQL> execute ajout_column ('MITMAS','TEST1','VARCHAR2(1)');
BEGIN ajout_column ('MITMAS','TEST1','VARCHAR2(1)'); END;
 
*
ERREUR Ó la ligne 1 :
ORA-00942: Table ou vue inexistante
ORA-06512: Ó "EMUC.AJOUT_COLUMN", ligne 24
ORA-06512: Ó ligne 1
Merci de votre aide.