Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Criar usuário a partir de variáveis ​​de string em um bloco PL/SQL


PLS-00103:Encontrou o símbolo "CREATE" ao esperar um dos seguintes:

O erro acima é devido ao fato de você estar usando DDL dentro de PL/SQL . Você não pode fazer isso. Você deve (ab)usar EXECUTAR IMEDIATAMENTE para emitir declarações DDL em PL/SQL .

Por exemplo,
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"

Referência rápida da documentação ,

Executando instruções DDL e SCL em PL/SQL

Somente SQL dinâmico pode executar os seguintes tipos de instruções dentro de unidades de programa PL/SQL:

  • Linguagem de definição de dados (DDL) instruções como CREATE , DROP , GRANT , e REVOKE

  • Linguagem de controle de sessão (SCL) instruções como ALTER SESSION e SET ROLE
  • A TABLE cláusula no SELECT declaração

Em uma nota lateral,

A criação de usuários e a concessão de privilégios geralmente são administração de banco de dados tarefas cuidadas pelo DBA. Não é uma atividade frequente feita via PL/SQL programa. O DBA cria os usuários e concede os privilégios necessários como uma atividade única.