现有一个用户temp01
而oracle中有若干个tablespace
现在只想允许temp01访问user,default,而不允许他访问其他所有的表
请问这个ALTER怎么写啊我幻想是
ALTER USER TEMP01 QUOTA 0 ON (SELECT TABLESPACE_NAME FROM DBA_TABLES WHERE TABLESPACE_NAME NOT IN ('USER','DEFAULT') GROUP BY TABLESPACE_NAME);可这错了,提示说invalid temporary tablespace identifier求助OTL

解决方案 »

  1.   

    1 select 'ALTER USER TEMP01 QUOTA 0 ON '||tablespace_name||';' from dba_tablespaces
    WHERE TABLESPACE_NAME NOT IN ('USER','DEFAULT');
    2将1中的结果集,拷贝到SQLPLUS里或其他工具里执行。
      

  2.   

    非常感谢您的回复
    确实结果集就是希望的结果
    可要求是只能在一个SQL脚本中执行,也就是自动操作
    不知可否再给点提示吗?
      

  3.   

    1中spool格式化输出到一文本文件,然后
    @your_name.sql
    执行之。注意该.sql文件里只能有1中的结果集。
      

  4.   

    请问有可能在一个SQL里执行完成而不需要再创建另外一个吗?SPOOL我知道但学校机房电脑很奇怪,edit test.sql后,选保存的话会丢失保存路径,再在@test执行会提示找不到,要用绝对路径比如@D:\test才可以
    所以很担心用SPOOL会创建失败不知道有更好的解决方案吗?
    谢谢
      

  5.   

    这样只是限制create权限,那select 其它表空间的表算不算访问其它表空间?
      

  6.   

    也一样吧
    REVOKE USE OF TABLESPACE [TABLE_NAME] FROM USER TEMP01头疼的就是要在一个SQL里完成