sql >> Base de Datos >  >> RDS >> Oracle

Crear usuario a partir de variables de cadena en un bloque PL/SQL

PLS-00103:Encontró el símbolo "CREATE" cuando esperaba uno de los siguientes:

El error anterior se debe al hecho de que está utilizando DDL dentro de PL/SQL . Usted no puede hacer eso. Debes (ab)usar EJECUTAR INMEDIATO para emitir declaraciones DDL en PL/SQL .

Por ejemplo,

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"

Referencia rápida de documentación ,

Ejecución de sentencias DDL y SCL en PL/SQL

Solo SQL dinámico puede ejecutar los siguientes tipos de declaraciones dentro de unidades de programa PL/SQL:

  • Lenguaje de definición de datos (DDL) declaraciones como CREATE , DROP , GRANT y REVOKE

  • Idioma de control de sesión (SCL) instrucciones como ALTER SESSION y SET ROLE

  • La TABLE cláusula en el SELECT declaración

En una nota al margen,

La creación de usuarios y la concesión de privilegios suelen ser administración de bases de datos tareas a cargo del DBA. No es una actividad frecuente realizada a través de PL/SQL programa. DBA crea los usuarios y otorga los privilegios necesarios como una actividad única.