正在创建的过程但不起作用

时间:2014-02-12 16:35:22

标签: oracle stored-procedures plsql passwords

DECLARE 

BEGIN
     FOR  s IN ( SELECT  first_name
                     FROM    EA_marketing_table
              WHERE   town    = 'LONDON'  
            )
     LOOP
           EXECUTE IMMEDIATE 'CREATE USER ' ||(s.first_name)|| ' IDENTIFIED BY LOL';
           dbms_output.put_line (s.first_name || ' IDENTIFIED BY LOL');
     END LOOP;

END;
/

我正在尝试创建一个用户,上面的代码让我创建一个用户,但是当我尝试创建一个过程时,它不会工作。

这是新代码

CREATE OR REPLACE PROCEDURE proc_it_development AS
first_name VARCHAR2 (25); 

BEGIN
     FOR  r IN ( SELECT  first_name
                 FROM    EA_marketing_table
                 WHERE   town    = 'lONDON ')
     LOOP
        EXECUTE IMMEDIATE 'CREATE USER '||(r.first_name)|| ' IDENTIFIED BY POOP ';

     END LOOP;

     EXCEPTION 
     WHEN NO_DATA_FOUND THEN  dbms_output.put_line ('r SELECT...INTO did not return any row.'); 

END;
/

有什么帮助吗?

:)

2 个答案:

答案 0 :(得分:0)

Roles are not enabled in procedures/packages因此您需要直接获得授予您用户的权限。您很可能通过角色(例如:DBA角色?)获得CREATE USER权限的用户进行连接。

要查看您在过程中可以执行的操作,可以禁用当前会话的活动角色:

set role none

然后尝试你的第一个代码块。如果它有效,它也可以在一个程序中工作。

要使用过程创建新架构,您需要直接授予架构的权限:

GRANT CREATE USER TO <your_schema>;

答案 1 :(得分:0)

您应该将密码用双引号括起来,在Oracle 11中,密码默认区分大小写。然后,您只创建一个没有任何权限的用户,即缺少创建会话权限。