Bonjour chers tous,

J'aimerais écrire un script de création dynamique d'utilisation. A la suite de la création de l'utilisateur, je dois créer des tables propres à l'utilisateur créé. Malheureusement, je n'arrive pas à créer mon utilisateur depuis une fonction.

voici le 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
 
CREATE OR REPLACE FUNCTION create_agence(nouveau_schema in varchar2)
RETURN varchar2 IS
 sch varchar2(255) :='C##' || nouveau_schema ;
 nbrLines number := 0;
 
BEGIN
    SELECT count(*) INTO nbrLines FROM dba_users WHERE username = sch;
 
    IF  nbrLines = 0  THEN
      ---------- Création du Schema ---------- 
      EXECUTE immediate 'create user '|| sch ||' identified by *******';
      EXECUTE immediate 'grant create session, connect, resource to  '||sch;
      COMMIT;
 
      RETURN 'ok';
    END IF;
 
    RETURN 'nok';
  END;
Quand je compile le script, je recois un message d'erreur qui est

Erreur(7,5): PL/SQL: SQL Statement ignored
Erreur(7,40): PL/SQL: ORA-00942: Table ou vue inexistante
J'ai essayé d'utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 EXECUTE IMMEDIATE 'SELECT username  FROM dba_users WHERE username = '||sch||'' INTO nbrLines;
mais j'ai toujours les même code d'erreur. Je me suis essayé avec l'utilisation de curseur sans y arriver.

J'aimerais avoir votre aide pour résoudre ce première problème en vue de poursuivre l'écriture de mon script.

Merci d'avance de votre aide