Oracle
 sql >> база данни >  >> RDS >> Oracle

Създайте потребител от низови променливи в PL/SQL блок

PLS-00103:Срещнахте символа „CREATE“, когато се очакваше едно от следните:

Горната грешка се дължи на факта, че използвате DDL вътре в PL/SQL . Не можеш да го направиш. Трябва (зло) да използвате ИЗПЪЛНЯВАНЕ НЕЗАБАВНО за издаване на DDL изявления в PL/SQL .

Например,

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"

Бърза справка от документацията ,

Изпълнение на DDL и SCL оператори в PL/SQL

Само динамичен SQL може да изпълнява следните типове оператори в рамките на PL/SQL програмни единици:

  • Език за дефиниране на данни (DDL) изрази като CREATE , DROP , GRANT и REVOKE

  • Език за контрол на сесиите (SCL) изрази като ALTER SESSION и SET ROLE

  • TABLE клауза в SELECT изявление

Като странична бележка,

Създаването на потребители и предоставянето на привилегии обикновено са администриране на база данни задачи, поети от DBA. Това не е честа дейност, извършвана чрез PL/SQL програма. DBA създава потребителите и предоставя необходимите привилегии като еднократна дейност.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Многократно вмъкване на SQL оракул

  2. Как да проверите пространството за таблици в Oracle SQL Developer?

  3. Явни JOIN срещу неявни присъединявания?

  4. RAC последователност Contention

  5. Oracle – Материализиран изглед все още е достъпен по време на пълно опресняване. Как работи това?