繁体   English   中英

使用默认表空间循环创建Oracle用户

[英]Create Oracle users in a loop with default tablespace

我尝试执行此操作,但是它在默认表空间上给出了错误。 我想给我创建的用户一个默认表空间,但是如何呢?

BEGIN
  FOR USERNAME IN (SELECT studentname from students)
  LOOP
    EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME.studentname  || ' IDENTIFIED BY ' || USERNAME.studentname;
    EXECUTE IMMEDIATE 'DEFAULT TABLESPACE "USERS"'; 
    EXECUTE IMMEDIATE 'TEMPORARY TABLESPACE "TEMP"';
    EXECUTE IMMEDIATE 'GRANT STUDENT TO ' || USERNAME.studentname ;                                    
  END LOOP;
END;


Error report - ORA-00900: invalid SQL statement ORA-06512: at line 5 00900. 00000 - "invalid SQL 

您需要将前三个语句合并为一个并添加适当的空格。 由于使用的是不区分大小写的标识符,因此不需要在表空间名称周围加上双引号。

BEGIN
  FOR USERNAME IN (SELECT studentname from students)
  LOOP
    EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME.studentname  || ' IDENTIFIED BY ' || USERNAME.studentname ||
                      '  DEFAULT TABLESPACE USERS  
                        TEMPORARY TABLESPACE TEMP';
    EXECUTE IMMEDIATE 'GRANT UNLIMITED TABLESPACE TO ' || USERNAME.studentname;
    EXECUTE IMMEDIATE 'GRANT STUDENT TO ' || USERNAME.studentname ;                                    
  END LOOP;
END;

就个人而言,我总是会使用SQL语句生成一个字符串,并将该字符串传递给EXECUTE IMMEDIATE 这样可以轻松地执行诸如记录已执行的SQL语句或记录失败的语句之类的操作。 这将使调试变得更加容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM