Oracle
 sql >> Base de données >  >> RDS >> Oracle

Créer un utilisateur à partir de variables de chaîne dans un bloc PL/SQL

PLS-00103 :Le symbole "CREATE" s'affiche lorsque l'un des éléments suivants est attendu :

L'erreur ci-dessus est due au fait que vous utilisez DDL dans PL/SQL . Vous ne pouvez pas le faire. Vous devez (ab)utiliser EXÉCUTER IMMÉDIATEMENT pour émettre des instructions DDL en PL/SQL .

Par exemple,

SQL> DECLARE
  2    my_user     VARCHAR2(30) := 'foo';
  3    my_password VARCHAR2(9)  := '1234';
  4  BEGIN
  5    EXECUTE IMMEDIATE 'CREATE USER '||my_user||' IDENTIFIED BY '||my_password;
  6    EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO '||my_user;
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL> conn foo/[email protected]
Connected.
SQL> SHOW USER
USER is "FOO"

Référence rapide de la documentation ,

Exécuter des instructions DDL et SCL en PL/SQL

Uniquement SQL dynamique peut exécuter les types d'instructions suivants dans les unités de programme PL/SQL :

  • Langage de définition des données (DDL) telles que CREATE , DROP , GRANT , et REVOKE

  • Langue de contrôle de session (SCL) telles que ALTER SESSION et SET ROLE

  • La TABLE clause dans le SELECT déclaration

En passant,

La création d'utilisateurs et l'octroi de privilèges relèvent généralement de l'administration de la base de données tâches prises en charge par le DBA. Ce n'est pas une activité fréquente effectuée via PL/SQL programme. L'administrateur de base de données crée les utilisateurs et accorde les privilèges nécessaires en une seule fois.