Oracle
 sql >> Database >  >> RDS >> Oracle

Crea utente da variabili stringa in un blocco PL/SQL

PLS-00103:è stato riscontrato il simbolo "CREA" quando si aspettava uno dei seguenti:

L'errore precedente è dovuto al fatto che stai utilizzando DDL all'interno di PL/SQL . Non puoi farlo. Devi (ab)usare ESEGUI IMMEDIATO per emettere dichiarazioni DDL in PL/SQL .

Ad esempio,

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"

Riferimento rapido da documentazione ,

Esecuzione di istruzioni DDL e SCL in PL/SQL

Solo SQL dinamico può eseguire i seguenti tipi di istruzioni all'interno di unità di programma PL/SQL:

  • Lingua di definizione dei dati (DDL) istruzioni come CREATE , DROP , GRANT e REVOKE

  • Lingua di controllo della sessione (SCL) istruzioni come ALTER SESSION e SET ROLE

  • Il TABLE clausola nel SELECT dichiarazione

In una nota a margine,

La creazione di utenti e la concessione di privilegi sono solitamente amministrazione del database compiti curati dal DBA. Non è un'attività frequente svolta tramite PL/SQL programma. DBA crea gli utenti e concede i privilegi necessari come attività una tantum.