sql >> Database >  >> RDS >> Oracle

Maak een gebruiker van stringvariabelen in een PL/SQL-blok

PLS-00103:Kwam het symbool "CREATE" tegen toen ik een van de volgende verwachtte:

De bovenstaande fout is vanwege het feit dat u DDL . gebruikt binnen PL/SQL . Dat kun je niet doen. U moet IMMEDIATE UITVOEREN . (misbruiken) gebruiken om DDL-verklaringen uit te geven in PL/SQL .

Bijvoorbeeld,

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"

Snelle referentie uit documentatie ,

DDL- en SCL-statements uitvoeren in PL/SQL

Alleen dynamische SQL kan de volgende soorten opdrachten uitvoeren binnen PL/SQL-programma-eenheden:

  • Taal voor gegevensdefinitie (DDL)-instructies zoals CREATE , DROP , GRANT , en REVOKE

  • Taal voor sessiecontrole (SCL)-instructies zoals ALTER SESSION en SET ROLE

  • De TABLE clausule in de SELECT verklaring

Even terzijde,

Het aanmaken van gebruikers en het verlenen van privileges is meestal databasebeheer taken uitgevoerd door de DBA. Het is geen frequente activiteit die wordt gedaan via PL/SQL programma. DBA maakt de gebruikers aan en verleent de benodigde rechten als een eenmalige activiteit.




  1. Uitdagingen bij het schalen van de Moodle PostgreSQL-database

  2. 2 manieren om te zien of verouderde functies nog steeds worden gebruikt in een SQL Server-instantie

  3. Fatale fout:oproep naar niet-gedefinieerde functie sqlsrv_connect()

  4. Meerdere rijen samenvoegen en groeperen in Oracle