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;
/
有什么帮助吗?
:)
答案 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中,密码默认区分大小写。然后,您只创建一个没有任何权限的用户,即缺少创建会话权限。