Bonjour,
J’ai une procédure qui crée une table temporaire de la manière suivante
Evidement le code réel est plus complexe, mais même cet exemple extrêmement simple génère le même problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Create Or Replace procedure maProcedure IS test number(10); Begin Select count(*) into test from user_tables where table_name = 'MATABLE'; if test>0 Then Execute immediate 'Truncate Table maTable;'; Execute immediate 'Drop Table maTable;'; End if; Execute immediate 'Create global temporary Table maTable on commit preserve rows as select 5 monchamp from dual'; commit; end;
Lorsque j’exécute ma procédure (sous sqlplus) j’ai le message d’erreur suivant :L’erreur est levée sur la ligne 10 de la procédure, c'est-à-dire sur le « execute immediate »
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SQL> execute maprocedure; BEGIN maprocedure; END; * ERREUR Ó la ligne 1 : ORA-01031: privilÞges insuffisants ORA-06512: Ó "MONSCHEMA.MAPROCEDURE", ligne 10 ORA-06512: Ó ligne 1 SQL>
En revanche lorsque je fait la même chose mais dans un script ,et non dans une procédure stockée, la tout passe nickel :Ce script est un copier collé du corps de la procédure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Declare test number(10); Begin Select count(*) into test from user_tables where table_name = 'MATABLE'; if test>0 Then Execute immediate 'Truncate Table maTable;'; Execute immediate 'Drop Table maTable;'; End if; Execute immediate 'Create global temporary Table maTable on commit preserve rows as select 5 monchamp from dual'; commit; end;
J’ai évidemment forcé un GRANT EXECUTE de mon utilisateur pour cette procédure, sans effet.
Merci de vos lumières
Partager