在循环中创建Oracle用户

时间:2013-04-10 18:37:03

标签: oracle for-loop oracle11g

我正在尝试创建oracle用户并使用循环授予连接。这就是我到目前为止所拥有的。

我收到错误Encountered the symbol "USERID"。我想我需要以某种方式逃离userid

BEGIN
  FOR USERNAME IN (SELECT USERID FROM SCHEMA.TABLENAME WHERE USERID NOT IN(SELECT NAME FROM USER$))
  LOOP
    EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME || ' IDENTIFIED BY ' USERNAME;
    EXECUTE IMMEDIATE 'GRANT CONNECT TO ' || USERNAME;                                  
  END LOOP;
END;

任何帮助修复声明都将不胜感激。

编辑:为清晰起见,更改光标名称。

2 个答案:

答案 0 :(得分:2)

您似乎在“IDENTIFIED BY”字符串之后和第二个||之前缺少字符串连接运算符USERID

EXECUTE IMMEDIATE 'CREATE USER ' || USERID || ' IDENTIFIED BY ' || USERID;

您似乎还想引用USERID光标中的USERNAME列。假设是这种情况,您需要使用语法USERNAME.USERID

EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME.USERID || ' IDENTIFIED BY ' || USERNAME.USERID;
EXECUTE IMMEDIATE 'GRANT CONNECT TO ' || USERNAME.USERID;   

答案 1 :(得分:0)

您无法在循环中使用数字1,2,3,4 ....创建用户。

如果要与字符串值abc1,abc2,abc3连接。 abc是默认值,并在循环中计数1,2,3。

declare
user varchar(10);
id number(10);
pwd varchar(10);

begin
for id in 1..3
loop
user:='abc';
pswd:='abcd';--password
user=user||id;--concate user+numeric value here.
execute immediate'create user'||user||'identifid by '||pswd;
execute immediate'grant connect to'||user;
execute immediate'grant resource to'||user;
end loop;
end;