0

我正在尝试创建 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;

任何解决该声明的帮助将不胜感激。

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

4

2 回答 2

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;   
于 2013-04-10T18:38:49.830 回答
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;
于 2018-10-01T07:27:44.320 回答