Bonjour,
J’ai une procédure qui crée une table temporaire de la manière suivante
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;
Evidement le code réel est plus complexe, mais même cet exemple extrêmement simple génère le même problème.

Lorsque j’exécute ma procédure (sous sqlplus) j’ai le message d’erreur suivant :
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>
L’erreur est levée sur la ligne 10 de la procédure, c'est-à-dire sur le « execute immediate »
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 :
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;
Ce script est un copier collé du corps de la procédure.
J’ai évidemment forcé un GRANT EXECUTE de mon utilisateur pour cette procédure, sans effet.

Merci de vos lumières