sql >> Databasteknik >  >> RDS >> Oracle

Skapa användare från strängvariabler i ett PL/SQL-block

PLS-00103:Påträffade symbolen "CREATE" när något av följande förväntades:

Ovanstående fel beror på att du använder DDL inuti PL/SQL . Du kan inte göra det. Du måste (ab)använda EXECUTE OMEDELBART för att utfärda DDL-utlåtanden i PL/SQL .

Till exempel,

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"

Snabbreferens från dokumentationen ,

Köra DDL- och SCL-satser i PL/SQL

Endast dynamisk SQL kan köra följande typer av satser inom PL/SQL-programenheter:

  • Datadefinitionsspråk (DDL)-satser som CREATE , DROP , GRANT och REVOKE

  • Sessionskontrollspråk (SCL)-satser som ALTER SESSION och SET ROLE

  • TABLE sats i SELECT uttalande

Som en sidoanteckning,

Att skapa användare och bevilja privilegier är vanligtvis databasadministration uppgifter som sköts av DBA. Det är inte en frekvent aktivitet som görs via PL/SQL program. DBA skapar användarna och beviljar nödvändiga privilegier som en engångsaktivitet.




  1. Hur man får kortdagens namn från ett datum i MariaDB

  2. Oracle instantclient DYLD_LIBRARY_PATH-fel

  3. Använda Sysbench för att generera testdata för delad tabell i MySQL

  4. Ställ in nyckel-/värdepar i sessionskontexten i SQL Server (sp_set_session_context)