我正在尝试创建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;
任何帮助修复声明都将不胜感激。
编辑:为清晰起见,更改光标名称。
答案 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;