Bonjour,

Dans l'optique de gérer une création automatique d'un utilisateur Oracle via une procédure stockée, je suis tombé sur un OS : la vue DBA_USERS n'est pas accessible selon le moyen par lequel on tente d'y accéder ...

Je m'explique, je travaille avec un USER ayant les droits DBA. Les 2 premiers bouts de codes ci-desous fonctionnent :

1) SQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SQL> SELECT DEFAULT_TABLESPACE 
  2    FROM DBA_USERS
  3   WHERE USERNAME = 'TEST';
 
DEFAULT_TABLESPACE
------------------------------
TBLTEST
2) Bloc PL anonyme :
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
SQL> SET SERVEROUTPUT ON SIZE 1000000;
SQL> 
SQL> DECLARE
  2     nomTbsp VARCHAR2(64);
  3  BEGIN
  4     SELECT DEFAULT_TABLESPACE INTO NomTbsp 
  5       FROM DBA_USERS
  6      WHERE USERNAME = 'TEST';
  7   
  8     Dbms_Output.Put_Line ('Nom = ' || nomTbsp);
  9  END;
 10  /
Nom = TBLTEST
 
Procédure PL/SQL terminée avec succès.
Par contre, impossible de créer une fonction stockée avec un appel à cette vue :

3) Fonction PL :
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
SQL> CREATE OR REPLACE FUNCTION NomTableSpace 
  2     (NomUser VARCHAR2)
  3  RETURN VARCHAR2 IS
  4     NomTbsp VARCHAR2(64);
  5  BEGIN
  6     SELECT DEFAULT_TABLESPACE INTO NomTbsp 
  7       FROM DBA_USERS
  8      WHERE USERNAME = NomUser;
  9   
 10     Dbms_Output.Put_Line ('Nom = ' || nomTbsp);
 11     
 12     RETURN nomTbsp;
 13  END;
 14  /
 
Attention : Fonction créée avec erreurs de compilation.
 
SQL> show Errors;
Erreurs pour FUNCTION NOMTABLESPACE :
 
LINE/COL ERROR
-------- ----------------------------------------------
6/4      PL/SQL: SQL Statement ignored
7/11     PL/SQL: ORA-00942: Table ou vue inexistante
Je n'ai rien trouvé qui m'explique cette erreur, qui m'étonne vu les privilèges de mon User. Si quelqu'un pouvait m'expliquer, et accessoirement m'apporter une solution, je lui en serait reconnaissant,

Merci,

Xavier