Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erstellen Sie Benutzer aus Zeichenfolgenvariablen in einem PL/SQL-Block

PLS-00103:Auf das Symbol „CREATE“ gestoßen, wenn eines der folgenden erwartet wurde:

Der obige Fehler ist darauf zurückzuführen, dass Sie DDL verwenden innerhalb von PL/SQL . Das kannst du nicht tun. Sie müssen IMMEDIATE AUSFÜHREN (missbrauchen). um DDL-Anweisungen auszugeben in PL/SQL .

Zum Beispiel

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"

Kurzreferenz aus der Dokumentation ,

Ausführen von DDL- und SCL-Anweisungen in PL/SQL

Nur dynamisches SQL kann die folgenden Arten von Anweisungen innerhalb von PL/SQL-Programmeinheiten ausführen:

  • Datendefinitionssprache (DDL)-Anweisungen wie CREATE , DROP , GRANT , und REVOKE

  • Sitzungssteuerungssprache (SCL)-Anweisungen wie ALTER SESSION und SET ROLE

  • Die TABLE -Klausel in SELECT Erklärung

Nebenbei bemerkt

Das Erstellen von Benutzern und das Gewähren von Berechtigungen sind normalerweise Datenbankverwaltung Aufgaben, die vom DBA wahrgenommen werden. Dies ist keine häufige Aktivität, die über PL/SQL ausgeführt wird Programm. Der DBA erstellt die Benutzer und gewährt die erforderlichen Berechtigungen als einmalige Aktivität.